c# - C# 值类型的直接比较

标签 c# generics comparison operators

我已阅读以下有关 C# 值类型比较的声明 在 C# in Depth, Second Edition 中多次。

第 77 页,

When a type parameter is unconstrained (no constraints are applied to it), you can use == and != operators, but only to compare a value of that type with null. You can’t compare two values of type T with each other.

...

When a type parameter is constrained to be a value type, == and != can’t be used with it at all.

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

这种情况如果能给出一个简单的例子就更好了。谁能给我 对以上段落试图传达的内容有一点了解吗?

最佳答案

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

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
}

关于c# - C# 值类型的直接比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6222487/

相关文章:

java - List<Dog> 是 List<Animal> 的子类吗?为什么 Java 泛型不是隐式多态的?

java - 变量(函数类型)参数计数和变量返回类型

java - 递归泛型

c# - 如果(!这){ 返回;在 C# 中有意义吗?

c# - 如何配置 UseSqlServer?

php int 比较 "smaller or equal than"返回空还是 null?

java - 比较两个文档,父元素和子元素的排序不同

c# - 比较具有相同数据的两个对象

c# - Entity Framework - 延迟加载甚至可以与 ToList() 一起使用

c# - 使用 XSP4 在 Monodevelop 中调试 ASP.NET MVC 应用程序