¿Hay algo malo en usar un operador implícita como la siguiente:operador implícito sobre los tipos genéricos
//linqpad c# program example
void Main()
{
var testObject = new MyClass<int>() { Value = 1 };
var add = 10 + testObject; //implicit conversion to int here
add.Dump(); // 11
}
class MyClass<T>
{
public T Value { get; set; }
public static implicit operator T (MyClass<T> myClassToConvert)
{
return myClassToConvert.Value;
}
}
estaba pensando que podía tratar como instancia del objeto como un tipo de valor de esta manera, pero ya que me Nunca he visto un ejemplo de esto, pensé que tal vez había una razón no para hacer algo como esto que alguien podría señalar?
En mi código real estaba pensando en hacer esto como parte de una capa de abstracción de datos, para poder devolver objetos con información que describa los datos subyacentes, pero permitir que el código lógico los trate como un tipo de valor cuando todo necesita saber sobre el valor, y al mismo tiempo mantenerlo todo bien y escribir seguro con los genéricos.
No estoy seguro de que entiendo la preocupación en torno a los tipos anulables ... Me parece que si tenía n = new MiClase() {} Valor = null; y el código de consumo intentó hacer algo como int i = n; y arrojaría la misma excepción que cualquier elenco malo, nada especial sobre el tipo que se puede anular aquí ¿verdad? –
asawyer
@asawyer: Fue solo un ejemplo. Imagine que no hubo 'T?' Y * usted * tuvo que implementar un 'Nullable' propio. ¿Le daría una conversión implícita a 'T'? Mi respuesta explica por qué no deberías, y por qué el * real * 'T?' No. –
Timwi
Veo ahora, es este tipo de preocupaciones lo que provocó la pregunta en primer lugar. Parece que debería estar bien para proceder, pero tenga mucho cuidado. – asawyer