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

Gor*_*ord 4 c# generics nullable

给定一个类定义,如:

public class Test<T>
{
    T _value;

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

    public void DoStuff()
    {
        if(_value.HasValue)
        {
            //stuff
        }
    }
 }
Run Code Online (Sandbox Code Playgroud)

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

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

Jon*_*eet 6

你不能强制它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
        }
    }
 }
Run Code Online (Sandbox Code Playgroud)

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