我已经阅读了有关C#值类型比较的以下声明 在C#in Depth,Second Edition中多次。
第77页,
当类型参数不受约束时(不对其应用约束),您可以使用==和!=运算符,但仅用于将该类型的值与null进行比较。您无法将T类型的两个值相互比较。
...
当类型参数被约束为值类型时,==和!=根本不能与它一起使用。
如果我理解(我不这么认为)它是正确的,它基本上告诉我你不能 使用==或!=来比较两种值类型。为什么为什么?
如果能够为这种情况提供一个简单的例子,那将会更好。有人可以给我 有点想法上面的段落试图传达什么?
答案 0 :(得分:7)
在约束到值类型(第二段)
时,它只是意味着这一点static bool TryToCompare<T>(T first, T second) where T : struct
{
return first == second; // not legal
return first.Equals(second); // legal
}
如果没有泛型的值类型约束,它也会说(第一段)
static bool TryToCompare<T>(T first, T second)
{
return first == second; // not legal
return first == null; // legal
return first.Equals(second); // legal
}
如果您将T
限制为引用类型,则可以使用==
static bool TryToCompare<T>(T first, T second) where T : class
{
return first == second; // legal
return first == null; // legal
return first.Equals(second); // legal
}
答案 1 :(得分:0)
对象无法比较,因为使用==的比较正在测试引用是否相同(内存地址)。您通常会使用if(string1.Equals(string2))。
我不明白的是,我已经看到了==使用字符串的情况,以及没有使用字符串的情况。