Я создал класс-оболочку, предназначенный для предотвращения того, чтобы ссылочные типы были нулевыми, как контракт кода предварительного условия.
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;
}
}
Это прекрасно работает, но всегда требуется приведение типа, как при работе с Nullable:
public void Foo(NonNullable<Bar> bar)
{
Console.WriteLine((Bar)bar);
}
Возможно ли, чтобы параметр типа NonNullable вел себя так, как если бы он был типа T, без его приведения?
Как в Spec #:
public string Foo(Bar! bar)