Y at-il de mal à utiliser un opérateur implicite comme ce qui suit:opérateur implicite sur les types génériques
//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;
}
}
Je pensais que je pouvais traiter comme exemple de l'objet en tant que type de valeur de cette façon, mais en voyant que je Je n'ai jamais vu un exemple de ceci, je pensais qu'il y avait peut-être une raison pour faire quelque chose comme ça que quelqu'un pourrait le faire remarquer? Dans mon code actuel, je pensais faire cela dans le cadre d'une couche d'abstraction de données, de sorte que je puisse retourner des objets avec des informations décrivant les données sous-jacentes, mais permettre au code logique de le traiter comme un type de valeur. a besoin de savoir est la valeur, et en même temps, gardez-le tout beau et tapez en toute sécurité avec les génériques.
Je ne suis pas sûr que je comprends l'inquiétude autour de types nullables ... Il me semble que si vous aviez n = new MyClass() {valeur} = null; et le code consommateur a tenté de faire quelque chose comme int i = n; et il jetterait la même exception que toute mauvaise distribution, rien de spécial sur le type nullable ici non? –
asawyer
@asawyer: C'était juste un exemple. Imaginez qu'il n'y ait pas de 'T? 'Et que * vous * deviez implémenter un' 'Nullable' '. Souhaitez-vous lui donner une conversion implicite en 'T'? Ma réponse explique pourquoi vous ne devriez pas, et pourquoi le * réel * 'T?' Ne le fait pas. –
Timwi
Je vois maintenant, ce sont ces types de préoccupations qui ont provoqué la question en premier lieu. Il semble que je devrais être autorisé à procéder, mais soyez très prudent. – asawyer