繁体   English   中英

在C#中自动转换包装器

[英]Automatic conversion of wrapper in 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;
    }

}

这可以正常工作,但始终需要像在处理Nullable时一样进行强制转换:

public void Foo(NonNullable<Bar> bar)
{
    Console.WriteLine((Bar)bar);
}

是否可以使类型为NonNullable的参数的行为就像其类型为T一样,而不必进行强制转换? 就像规格#:

public string Foo(Bar! bar)

您可以通过使用Value属性使对象本身可访问来避免强制转换,但是是否有比强制转换更好的方法尚待商::

Console.WriteLine(bar.Value);

您甚至可以使用技巧,通过XML或代码内注释来告诉诸如ReSharper之类的工具此值不为null:

[NotNull]
public T Value { get { return t; } }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM