【发布时间】:2015-03-09 22:08:44
【问题描述】:
来自https://msdn.microsoft.com/en-us/library/d5x73970.aspx
应用 where T : class 约束时,避免使用 == 和 != 类型参数上的运算符,因为这些运算符将测试 仅参考身份,不用于价值平等。甚至是这种情况 如果这些运算符在用作 争论。下面的代码说明了这一点;输出是 即使 String 类重载 == 运算符,也是 false。
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);
}
一切正常,直到我尝试使用相同的方法
static void Main()
{
string s1 = "target";
string s2 = "target";
OpTest<string>(s1, s2);
}
它输出'True',s1和s2引用内存中的不同对象,即使它们具有相同的值,对吗?我错过了什么吗?
【问题讨论】: