請參閱下面的代碼:.Equals返回意外的結果
public class ValueType<T> where T : class,new()
{
public virtual bool Equals(T other)
{
if (other == null)
return false;
Type t = GetType();
Type otherType = other.GetType();
if (t != otherType)
return false;
FieldInfo[] fields = t.GetFields(System.Reflection.BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
foreach (FieldInfo field in fields)
{
object value1 = field.GetValue(other);
object value2 = field.GetValue(this);
if (value1 == null)
{
if (value2 != null)
return false;
}
else if (!value1.Equals(value2))
return false;
}
return true;
}
}
class Tiger : ValueType<Tiger> { public string name; public Tiger mother; }
class Program
{
static void Main(string[] args)
{
Tiger t1 = new Tiger() { name = "Teri" };
Tiger t2 = new Tiger() { name = "Teri" };
Tiger t3 = new Tiger() { name = "Toni", mother=t1 };
Tiger t4 = new Tiger() { name = "Toni", mother = t2 };
bool Test1 = t4.mother.Equals(t3.mother); //Highlighed line
bool Test2 = t4.Equals(t3);
}
}
我不明白爲什麼突出顯示的行返回false。我希望它運行在一個無限循環中。
爲什麼你希望一個無限循環?它返回'true'順便說一句。這是不是預料到的,因爲兩個母親是平等的,他們有同樣的名字,沒有母親。他們的'mother'字段返回'null',因爲'Tiger'是一個引用類型(class): –
我認爲他期待的!value1.Equals(value2)調用相同的等號函數 – chrispepper1989
@ chrispepper1989,是的。 +1。 – w0051977