我已经构建了旨在防止引用类型为空的包装类,作为前置条件代码合同。
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)