我在這裏談論C#語言。在msdn的Object.Equals(Object)方法的是可空的<T>。等式方法實現錯誤?
定義是:
確定指定 Object是否等於當前的Object。
如果兩個對象相等,則返回true,但是如果他們是null,則返回false:
x.Equals(空引用(在 Visual Basic中爲Nothing))返回false。
爲什麼?因爲null不是一個對象。
如果對象參數是空值,則拋出NullReferenceException。
和我們也有這樣的:
x.Equals(y)返回相同的值 y.Equals(X)。
直到這裏都沒問題。它與Java非常相似。但C#還爲非空類型提供了System.Nullable
結構。據我所知,一個結構是一個對象。它繼承Object.Equals方法。
如果我有這樣的結構:
struct Car
{
public string Make;
public string Model;
public uint Year;
public Car(string make, string model, uint year)
{
Make = make;
Model = model;
Year = year;
}
}
,打造四個實例:
Car car1 = new Car("make", "model", 2009);
Car car2 = new Car("make", "model", 2009);
Car car3 = new Car("make", "model", 2008);
car1.Equals(car2); // will return true
car1.Equals(car3); // will return false;
而且據我所知,我們不能設置一個結構爲空值。但是System.Nullable是一個結構,我們可以做編譯這個沒有任何錯誤:
int? i = null;
(?我希望有人能也解釋了這個它是一個結構或其他什麼東西)
我真正的問題是:
i.Equals(null); // returns true!
(通常x.Equals(Y)= y.Equals(X)當然null.Equals(I)的無效這裏...)
顯然的Object.Equals方法在這裏重寫。也許它被記錄下來,並且這是特定的。但是這種方法是正確的還是很好的?如果是這樣,==和Equals方法之間的Nullable值有什麼區別?
但是,無論它在後臺我們調用i.Equals(null),並且當我爲null時它會返回true。它應該返回false爲其他對象。 – JCasso 2009-10-08 23:50:48
@jcasso,Nullable的一般...都很奇怪,而且往往以意想不到的方式行事。部分困惑是我永遠不能爲空,因爲它實際上是一個值類型。最好把它看作是一個空的可空對象。 – JaredPar 2009-10-08 23:52:07
至少你接受它是奇怪的:)我以爲我是唯一的一個。 – JCasso 2009-10-08 23:53:43