J'ai une classe d'encapsulation de construction destinée à empêcher les types de référence d'être nul, en tant que contrat de code de pré-condition.Conversion automatique de l'encapsuleur en C#
public sealed class NotNullable<T>
where T : class
{
private T t;
public static implicit operator NotNullable<T>(T otherT)
{
otherT.CheckNull("Non-Nullable type");
return new NotNullable<T> {t = otherT};
}
public static implicit operator T(NotNullable<T> other)
{
return other.t;
}
}
Cela fonctionne finement, mais un casting est toujours nécessaire comme lorsqu'ils traitent avec Nullable:
public void Foo(NonNullable<Bar> bar)
{
Console.WriteLine((Bar)bar);
}
Serait-il possible d'avoir le paramètre de se comporter de type nonnullable comme si elle était de type T, sans avoir à le lancer? Comme dans SpeC#:
public string Foo(Bar! bar)
oui et non, oui - si vous écrivez votre propre compilateur/pré-processeur ... non si vous utilisez simplement C# comme AFAIK ... – Yahia
Qu'en est-il d'un wrapper 'null'? – SLaks