根据它说的类型参数约束(C#编程指南)文档,我引用:
应用 where T : class 约束时,请避免在类型参数上使用 == 和 != 运算符,因为这些运算符将仅测试引用标识,而不是值相等。即使这些运算符在用作参数的类型中被重载也是如此。下面的代码说明了这一点;即使 String 类重载了 == 运算符,输出也是错误的。
使用以下示例:
public static void OpTest<T>(T s, T t) where T : class
{
System.Console.WriteLine(s == t);
}
static void Main()
{
string s1 = "target";
System.Text.StringBuilder sb = new System.Text.StringBuilder("target");
string s2 = sb.ToString();
OpTest<string>(s1, s2);
}
但是,ReSharper(我刚刚开始使用演示/试用版来查看它是否对我有价值)提供了一个提示/提示,可以对参数进行空值检查,如下所示:
public Node(T type, Index2D index2D, int f, Node<T> parent)
{
if (type == null) throw new ArgumentNullException("type");
if (index2D == null) throw new ArgumentNullException("index2D");
if (parent == null) throw new ArgumentNullException("parent");
}
(T 受 约束where T : class, new()
)
我能否安全地遵循 ReSharper 而不会遇到 C# 文档试图告诉我避免的问题?