如何检查泛型类型参数是否可为空?

32

我正在尝试确定一个类型参数是否为可空类型。

可能有重复内容:
确定一个泛型参数是否为可空类型

    public T Get<T>(int index)
    {
        var none=default(T);
        var t = typeof(T);
        BaseVariable v = this[index].Var;
        if (T is Nullable) //compiler error
        {
            if (v == ... )
            {
                return none;
            }
        }
        //....
    }

我该怎么做?我尝试过t == typeof(Nullable),但结果总是为false。

我想要的是在某些情况下foo.Get<bool?>(1)为空。


4
这是一个重复的问题,链接为 https://dev59.com/-m435IYBdhLWcg3w1z0t。 - Nix
1
@Nix 那是VB,所以可能边缘不算重复。我们会看看的。 - Earlz
4
解决方案使用C#和VB编写。 - Nix
1个回答

58
你可以使用 Nullable.GetUnderlyingType 方法:
var t = typeof(T);
// ...
if (Nullable.GetUnderlyingType(t) != null)
{
    // T is a Nullable<>
}

1
我的 .NET Core 3.1 版本和 C#8.0 中无法正常工作。 - niproblema
适用于net5.0/c#9,顺便说一下。 - JohnnyFun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接