2010-01-06 32 views
5

que tiene esta funciónproblema con la conversión implícita y nula

public static implicit operator MyClass(string v) { return new MyClass(v); } 

y escribir var.myclass = null ;. Esto llama al operador implícito y pasa nulo como cadena, lo que causa estragos en mi código (uso el reflejo y no me gustaría agregar un caso especial). ¿Cómo puedo escribir myclass = null sin causar el operador implícito?

he intentado escribir

public static implicit operator MyClass(string v) { return v == null ? null : new MyClass(v); } 

Pero eso provoca un stackoverflow

+4

¿MyClass es una estructura? ¿Qué argumento toma tu constructor? – SLaks

+0

¿Se puede escribir como un operador explícito en su lugar? –

+0

No puedo reproducir su problema; probablemente tengas algo más equivocado. – SLaks

Respuesta

5

Creo que su problema es que ambos lados del operador ternario deben ser del mismo o de tipos compatibles.

escritura Try

if (v == null) 
    return null; 
else 
    return new MyClass(v); 

EDITAR: Sólo puedo reproducir su problema si hago MyClass una estructura, en cuyo caso su pregunta es imposible; una estructura no puede ser nulo.

Proporcione más detalles.

+0

Estás pensando en un error de tiempo de compilación, que se solucionaría cambiándolo a: return v == null? (MyClass) null: new MyClass (v); Es probable que el desbordamiento de la pila sea un error de tiempo de ejecución, donde llama al operador implícito recursivamente. –

+2

Es un elenco implícito: el compilador insertaría automáticamente '(MyClass)' – SLaks

+0

Era una estructura. Uy. –

Cuestiones relacionadas