Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: WHK en 17 Julio 2013, 16:38 pm



Título: Como crear un nuevo cast explicito en c#?
Publicado por: WHK en 17 Julio 2013, 16:38 pm
Digamos que tengo lo siguiente:

Código:
string abc = "123456";

Para convertir en int debo utilizar convert:

Código:
int abcInt = Convert.ToInt32(abc);

El problema es que si no es numérico tengo una excepción en ves de retornar cero por lo tanto mi código final quedará así:

Código:
try{ int abcInt = Convert.ToInt32(abc); }catch(Exception e){ int abcInt = 0; }

Asi que en ves de eso decidí crear una librería que me convertía un objeto en numérico sin excepciones retornando cero si falló, de esta manera podría mantener una programación mas flexible sin tanto código basura:

Código:
int abcInt = Librerias.str.toInt(abc);

El código es el siguiente:

Código:
public int toInt(object buffer)
        {
            if (String.IsNullOrEmpty(buffer.ToString()))
                return 0;
            try
            {
                return Convert.ToInt32(System.Text.RegularExpressions.Regex.Replace(buffer.ToString(), "@[^Ee0-9\\.]+@i", ""));
            }
            catch (FormatException e)
            {
                return 0;
            }
        }

Pero quiero ir un paso mas allá y hacer algo como esto:

Código:
int abcInt = (safeInt)abc;

El problema es... como lo hago?, se que debo comenzar creando una librería llamada safeInt, ok está hecho y he averiguado al respecto, supe que debo utilizar:

Código:
	public class safeInt
{
public explicit operator int(object buffer) {

Pero no he encontrado la manera de obtener y devolver el valor necesitado obteniendo el objeto casteado. Intenté utilizar el constructor para devolver el valor pero no me resultó.

Alguien sabe si esto es posible desde c#? si es así entonces me gustaría crear un lote de librerías similares a las nativas (ojala extendidas pero no se como se pueden extender) creando una programación "no estricta" tal como lo hace de forma nativa php para aumentar la velocidad del desarrollo de la aplicación.

Al probar un simple cast:
Código:
int abcInt = (safeInt)abc;

Me ha dicho lo siguiente el visual studio:
Citar
No se puede convertir el tipo 'string' en 'Librerias.safeInt.safeInt'

Alguien sabe como hacer esto?


Título: Re: Como crear un nuevo cast explicito en c#?
Publicado por: Novlucker en 17 Julio 2013, 18:49 pm
La manera correcta ...
http://msdn.microsoft.com/en-us/library/system.int32.tryparse.aspx

Otra alternativa es crear una clase extensora

Y siguiendo con tu consulta específica ...
http://msdn.microsoft.com/en-us/library/xhbhezf4(v=vs.80).aspx

Saludos


Título: Re: Como crear un nuevo cast explicito en c#?
Publicado por: WHK en 17 Julio 2013, 22:57 pm
muchas gracias, me ha servido bastante :)

También encontré mas ayuda al respecto acá:
http://stackoverflow.com/questions/17705349/how-to-create-a-custom-cast-explicit-in-c