【发布时间】:2009-08-04 06:36:17
【问题描述】:
我注意到一些 .NET 结构可以与 null 进行比较。 例如:
TimeSpan y = new TimeSpan();
if (y == null)
return;
会编译得很好(与 Guid 结构相同)。
现在我知道结构是值类型并且上面的代码不应该编译,除非有一个重载的 operator == 需要一个对象。但是,据我所知没有。
我已经使用 Reflector 查看了该课程,还查看了 MSDN 上的文档。
他们两个确实实现了以下接口:
IComparable, IComparable<T>, IEquatable<T>
但是,尝试实现相同的接口似乎没有帮助:
struct XX : IComparable, IComparable<XX>, IEquatable<XX> {
public int CompareTo(Object obj) {
return 0;
}
public int CompareTo (XX other){
return 0;
}
public bool Equals (XX other){
return false;
}
public override bool Equals(object value){
return false;
}
public static int Compare(XX t1, XX t2){
return 0;
}
}
我正在使用:.NET 2.0 Visual Studio 2005。
有人知道这是什么原因吗? 我只是想更好地理解。这不是问题,因为我知道我不应该将结构与 null 进行比较。
【问题讨论】:
-
“我正在使用:.NET 2.0 Visual Studio 2005。” - 它会发出警告吗? IIRC,它应该在 2005 年(但不是 2008 年,见下文)
-
TimeSpan 没有警告,XX 有错误:错误 CS0019:运算符“==”不能应用于“TransControl.TraceDisplay.XX”和“
”类型的操作数
标签: c# .net .net-2.0 null struct