2011-06-01 17 views
6
class Person 
{ 
    string Name; 
    int Age; 
} 

Quiero ser capaz de convertir una cadena a la persona de manera implícita como seguirsobrecarga/operador implícito para 'como'

var mrFoo = "Foo" as Person; 

Sé que puedo hacer lo siguiente mediante la definición de la conversión implícita

Person mrFoo = "Foo"; 

Pero soy específico para usar el operador "como"

+1

Puede definir sobrecargas explícitas del operador de conversión y usar un molde explícito '(Person)' en lugar del operador 'as'. –

Respuesta

20

No, no puedes hacer eso. El operador "como" nunca usa conversiones definidas por el usuario, solo conversiones de referencia y conversiones de unboxing. Básicamente, la referencia en cuestión ya tiene que ser del tipo correcto.

Personalmente quisiera fuertemente le aconsejo que se mantenga alejado de los operadores de conversión (especialmente los implícitos) para la gran mayoría de los casos. Por lo general, tener una conversión método es más clara, p. Person.FromString(...).

+3

+1 por no hacerlo – SLaks

4

No hay necesidad de utilizar el operador as, ya que se puede hacer esto con la implicit operador: http://msdn.microsoft.com/en-us/library/z5z9kes2(v=vs.71).aspx

algo en este sentido debería funcionar:

public static implicit operator Person(string s) 
{ 
    Person p = new Person() {Name = s}; 
    return p; 
} 

Ahora simplemente puede hacer:

Person p = "John Doe"; 
+0

Entonces, ¿cómo es posible sobrecargar un operador en un sistema sellado? Estoy bastante seguro de que no puedes hacer esto. –

6

¿Ha considerado usar un constructor parametrizado?

var mrFoo = new Persona ("Foo");

+2

Esta es la forma más sensata de hacerlo. – daniel1426