Como crear un nuevo cast explicito en c#?

Iniciado por WHK, 17 Julio 2013, 16:38 PM

0 Miembros y 1 Visitante están viendo este tema.

WHK

Digamos que tengo lo siguiente:

string abc = "123456";

Para convertir en int debo utilizar convert:

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í:

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:

int abcInt = Librerias.str.toInt(abc);

El código es el siguiente:

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:

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:

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:
int abcInt = (safeInt)abc;

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

Alguien sabe como hacer esto?

Novlucker

#1
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
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

WHK