You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#泛型中无约束类型参数规则解析及示例请求

无约束类型参数示例解析

什么是无约束类型参数

无约束类型参数指未通过where子句添加约束条件的泛型类型参数,比如public class SampleClass<T>中的T,它可以接受任意类型作为实参(引用类型、值类型均可)。

规则1:无约束类型参数可与null比较

不管T是引用类型还是值类型,都能直接将T类型的实例与null做比较,语法完全合法。示例代码:

public class SampleClass<T>
{
    public bool CheckIfNull(T item)
    {
        // 直接与null比较,无语法错误
        return item == null;
    }
}

规则2:若类型实参为值类型,与null的比较始终返回false

当T的实参是值类型(如int、DateTime、自定义结构体)时,item == null的结果永远是false——因为普通值类型本身无法被赋值为null。示例验证:

public static void Main()
{
    // 引用类型实参:string
    var stringSample = new SampleClass<string>();
    Console.WriteLine(stringSample.CheckIfNull(null)); // 输出: True
    Console.WriteLine(stringSample.CheckIfNull("hello")); // 输出: False

    // 值类型实参:int
    var intSample = new SampleClass<int>();
    Console.WriteLine(intSample.CheckIfNull(100)); // 输出: False

    // 值类型实参:自定义结构体
    var structSample = new SampleClass<MyStruct>();
    Console.WriteLine(structSample.CheckIfNull(new MyStruct())); // 输出: False
}

public struct MyStruct { }

运行结果清晰体现:

  • 当T为引用类型时,传入null会返回true,传入有效实例返回false;
  • 当T为值类型时,无论传入什么值,与null的比较结果都是false。

内容的提问来源于stack exchange,提问作者YaSecu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 06:53:13