如何为泛型提供引用类型的约束?

时间:2013-03-08 08:22:45

标签: c# generics

我遇到这种情况:

public class FOO<T> where T : IBar
{
    private T _xxx;
    public Y(T xxx)
    {
        if (xxx == null) throw new ArgumentNullException("xxx");
        _xxx = xxx;
    }
}

public interface IBar 
{
    string XString { get; }
}

在构造函数中,我正在检查T null。编译器正确警告我,我正在检查可能是值类型的null,因为IBar可以由结构实现。

如何约束T作为参考类型?

1 个答案:

答案 0 :(得分:5)

典型的神话(即使我之前得到过)是从界面派生的类型是隐式引用类型,但实际上并非如此。 Struct 也可以有界面。

因此,您应该添加更多约束class以指示为引用类型

public class FOO<T> where T : class, IBar