c# – 是否可以强制类型参数在类上可为空

给定一个类定义,如:

public class Test<T>
{
    T _value;

    public void Test(T value)
    {
        _value = value;
    }

    public void DoStuff()
    {
        if(_value.HasValue)
        {
            //stuff
        }
    }
 }

我想强制说T是可空的,所以我可以使用类:

//does stuff
new Test<int?>(3).DoStuff();
//doesn't do stuff
new Test<int?>(null).DoStuff();

解决方法:

你不能强制T本身是一个可以为空的值类型,不.您可以强制T是不可为空的值类型,然后 – 然后使用T?在课堂上到处都是.

public class Test<T> where T : struct
{
    T? _value;

    public void Test(T? value)
    {
        _value = value;
    }

    public void DoStuff()
    {
        if(_value.HasValue)
        {
            //stuff
        }
    }
 }

另一个特点是你不能将T约束为包含引用类型的任何可空类型 – 同样,你也不能将T约束为任何值类型,包括可空值类型. where T:class约束仅适用于类(包括委托类型)和接口,以及where T:struct约束仅适用于非可空值类型(包括枚举).

上一篇:RAC基本使用


下一篇:Java并发编程:线程和锁的使用与解析