直接比较C#值类型

q09*_*987 5 c# generics comparison operators

我已经阅读了以下关于C#在深度,第二版中多次比较C#值类型的声明.

第77页,

当类型参数不受约束时(不对其应用约束),您可以使用==和!=运算符,但仅用于将该类型的值与null进行比较.您无法将T类型的两个值相互比较.

...

当类型参数被约束为值类型时,==和!=根本不能与它一起使用.

如果我理解(我不这么认为)它是正确的,它基本上告诉我你不能使用==或!=来比较两种值类型.为什么为什么?

如果能够为这种情况提供一个简单的例子会更好.有人能给我一点想法,上面的段落试图传达什么?

Ant*_*ram 7

在约束到值类型(第二段)时,它只是意味着这一点

static bool TryToCompare<T>(T first, T second) where T : struct
{
    return first == second; // not legal
    return first.Equals(second); // legal
}
Run Code Online (Sandbox Code Playgroud)

如果没有泛型的值类型约束,它也会说(第一段)

static bool TryToCompare<T>(T first, T second) 
{
    return first == second; // not legal
    return first == null; // legal
    return first.Equals(second); // legal
}
Run Code Online (Sandbox Code Playgroud)

如果限制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
}
Run Code Online (Sandbox Code Playgroud)