Aynı türden iki nesnenin aynı örnek olup olmadığını ve aynı bellek ayırımı olup olmadığını kontrol etmem gerekiyor. Sorun, türün aşırı yük operatörüne aşırı yüklenmesi ve dolayısıyla her ikisinin de eşitlikle karşılaştırılması olarak kullanacağı, ancak onları referans olarak kontrol etmem gerektiğidir. Ben object.ReferenceEquals()
yöntemiyle baktım ama içtenEşitlik operatörü geçersiz kılındığında başvurulan iki nesneyi karşılaştırın
7
A
cevap
7
Operatörler geçersiz kılınamaz eşitlik operatörü uygular - onlar sadece aşırı olabilir.
Yani object.ReferenceEquals
yılında ==
operatör hala referansları karşılaştırıyor ya bir tane döküm aynı şeyi kendiniz yapabilir veya iki işlenen olabilir:
string x = "some value";
string y = new string(x.ToCharArray());
Console.WriteLine(x == y); // True
Console.WriteLine((object) x == (object) y); // False
Console.WriteLine(ReferenceEquals(x, y)); // False
5
ReferenceEquals
sen olmadıkça tam olarak, gerek yapar sözlükten bahsediyorum. Equals
'u (tam anlamıyla yalnızca ldarg.0
, ldarg.1
, ceq
, ret
) denetlemez. Alternatif olarak, sadece nesnesine döküm:
bool same = (object)x == (object)y;
(böylece: GetHashCode
): System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode(obj)
arkadaşın.
Hayır öyle değil. * Kendi * eşitlik operatörünü kullanarak * referansları * karşılaştırır. Aşırı yüklü olanlar değil –