c# - 如何给泛型施加对引用类型的约束?

标签 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 限制为引用类型?

最佳答案

典型的神话(甚至我之前也有过)是从接口(interface)派生的类型是隐式引用类型,但实际上并非如此。 结构也可以有接口(interface)。

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

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

关于c# - 如何给泛型施加对引用类型的约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15289559/

相关文章:

c# - 保护数据库连接字符串

C# NET 5.0 源代码生成器基本示例不生成输出

Java - 定义一个扩展类 A 并实现接口(interface) B 的成员

java - 为什么 Java 8 泛型类型推断选择这个重载?

c# - 为什么我应该返回 IList<T> 而不是 List<T>?

java - Java 中的通用数组比较

c# - .NET 扩展性和 ASP.NET 之间的区别

c# - 当路径中存在句点时找不到 ServiceStack 处理程序

c# - 在 Entity Framework 中从数据库加载 N 条记录

java - 新的 ArrayList<int>() 在 Java 中失败