Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
== (eşitlik) ve != (eşitsizlik) işleçleri, işlenenlerinin eşit olup olmadığını denetler. İçerikleri eşit olduğunda değer türleri eşittir. İki değişken aynı depolama alanına başvurduğunda başvuru türleri eşittir.
is
== karşı test ederken bir teste alternatif olarak desen eşleştirme işlecini kullanabilirsiniz.
is işleci tüm değer ve başvuru türleri için varsayılan eşitlik semantiğini kullanır.
Eşitlik işleci ==
Eşitlik işleci==, işlenenleri eşitse, true aksi takdirde döndürürfalse.
Değer türleri eşitliği
Yerleşik değer türlerinin işlenenleri, değerleri eşitse eşittir:
int a = 1 + 2 + 3;
int b = 6;
Console.WriteLine(a == b); // output: True
char c1 = 'a';
char c2 = 'A';
Console.WriteLine(c1 == c2); // output: False
Console.WriteLine(c1 == char.ToLower(c2)); // output: True
Not
İşlenenlerden == işleçleri için işlemin sonucu olur<.><=>= Bu, değerin NaN dahil olmak üzere doublediğer float (veya ) değerlerden büyük, küçük veya NaNbuna eşit olmadığı anlamına gelir. Daha fazla bilgi ve örnek için veya Double.NaN başvuru makalesine Single.NaN bakın.
Temel alınan tam sayı türünün karşılık gelen değerleri eşitse, aynı sabit listesi türünün iki işleneni eşittir.
Kullanıcı tanımlı yapı türleri varsayılan olarak işleci desteklemez == . İşleci == desteklemek için kullanıcı tanımlı bir yapıyı aşırı yüklemesi gerekir.
C# tanımlama kümeleri ve == için yerleşik desteğe != sahiptir. Daha fazla bilgi için, Tanımlama grubu türleri makalesinin Tanımlama Grubu eşitliği bölümüne bakın.
Başvuru türleri eşitliği
Varsayılan olarak, kayıtlar hariç başvuru türü işlenenler aynı nesneye başvuruda bulunurlarsa eşittir:
public class ReferenceTypesEquality
{
public class MyClass
{
private int id;
public MyClass(int id) => this.id = id;
}
public static void Main()
{
var a = new MyClass(1);
var b = new MyClass(1);
var c = a;
Console.WriteLine(a == b); // output: False
Console.WriteLine(a == c); // output: True
}
}
Örnekte gösterildiği gibi, kullanıcı tanımlı başvuru türleri varsayılan olarak işleci destekler == . Ancak, bir başvuru türü işleci aşırı == yükleyebilir. Bir başvuru türü işleci aşırı yüklerse == , bu türdeki iki başvurunun Object.ReferenceEquals aynı nesneye başvurup başvurmadığını denetlemek için yöntemini kullanın.
Kayıt türleri eşitliği
Kayıt türleri, varsayılan olarak değer eşitliği semantiği sağlayan ve == işleçlerini destekler!=. Diğer bir ifadeyle, her ikisi de null tüm alanların değerleri veya bunlara karşılık gelen değerler olduğunda ve otomatik olarak uygulanan özellikler eşit olduğunda iki kayıt işleneni eşittir.
public class RecordTypesEquality
{
public record Point(int X, int Y, string Name);
public record TaggedNumber(int Number, List<string> Tags);
public static void Main()
{
var p1 = new Point(2, 3, "A");
var p2 = new Point(1, 3, "B");
var p3 = new Point(2, 3, "A");
Console.WriteLine(p1 == p2); // output: False
Console.WriteLine(p1 == p3); // output: True
var n1 = new TaggedNumber(2, new List<string>() { "A" });
var n2 = new TaggedNumber(2, new List<string>() { "A" });
Console.WriteLine(n1 == n2); // output: False
}
}
Yukarıdaki örnekte gösterildiği gibi, başvuru türü üyeleri için başvuru değerleri karşılaştırılır, başvuruda bulunan örnekler karşılaştırılmaz.
Dize eşitliği
her ikisi de aynı uzunlukta olduğunda veya her iki dizenulldize işleneni eşittir:
string s1 = "hello!";
string s2 = "HeLLo!";
Console.WriteLine(s1 == s2.ToLower()); // output: True
string s3 = "Hello!";
Console.WriteLine(s1 == s3); // output: False
Dize eşitliği karşılaştırmaları büyük/küçük harfe duyarlı sıralı karşılaştırmalardır. Dize karşılaştırması hakkında daha fazla bilgi için bkz . C# dilinde dizeleri karşılaştırma.
Temsilci eşitliği
Aynı çalışma zamanı türünde iki temsilci işleneni, her ikisi de null aynı uzunlukta olduğunda veya çağrı listeleri aynı uzunlukta olduğunda ve her konumda eşit girdilere sahip olduğunda eşittir:
Action a = () => Console.WriteLine("a");
Action b = a + a;
Action c = a + a;
Console.WriteLine(object.ReferenceEquals(b, c)); // output: False
Console.WriteLine(b == c); // output: True
Önemli
Çağırma listesindeki eşit girdiler, alıcı dahil olmak üzere çağrıdaki tüm sabit parametreleri içerir. Alıcı, girdi çağrıldığında tarafından this temsil edilen bir nesnenin örneğidir.
var o1 = new object();
var o2 = new object();
var d1 = o1.ToString;
var d2 = o2.ToString;
Console.WriteLine(object.ReferenceEquals(d1, d2)); // output: False
Console.WriteLine(d1 == d2); // output: False (different receivers)
Daha fazla bilgi için C# dil belirtiminin Temsilci eşitlik işleçleri bölümüne bakın.
Aşağıdaki örnekte gösterildiği gibi, anlamsal olarak özdeş lambda ifadelerinin değerlendirilmesinden oluşturulan temsilciler eşit değildir:
Action a = () => Console.WriteLine("a");
Action b = () => Console.WriteLine("a");
Console.WriteLine(a == b); // output: False
Console.WriteLine(a + b == a + b); // output: True
Console.WriteLine(b + a == a + b); // output: False
Eşitsizlik işleci !=
Eşitsizlik işleci!=, işlenenleri eşit değilse, true aksi takdirde döndürürfalse. Yerleşik türlerin işlenenleri için ifadex != y, ifadesiyle !(x == y)aynı sonucu verir. Tür eşitliği hakkında daha fazla bilgi için Eşitlik işleci bölümüne bakın.
Aşağıdaki örnekte işlecin kullanımı gösterilmektedir != :
int a = 1 + 1 + 2 + 3;
int b = 6;
Console.WriteLine(a != b); // output: True
string s1 = "Hello";
string s2 = "Hello";
Console.WriteLine(s1 != s2); // output: False
object o1 = 1;
object o2 = 1;
Console.WriteLine(o1 != o2); // output: True
İşleç aşırı yüklenebilirliği
Kullanıcı tanımlı bir tür ve işleçlerini aşırı yükleyebilir==.!= Bir tür iki işleçlerden birini aşırı yüklerse, diğerini de aşırı yüklemelidir.
Kayıt türü ve == işleçlerini != açıkça aşırı yükleyemez. kayıt türü ==için ve != işleçlerinin T davranışını değiştirmeniz gerekiyorsa aşağıdaki imzayla IEquatable<T>.Equals yöntemini uygulayın:
public virtual bool Equals(T? other);
C# dili belirtimi
Daha fazla bilgi için C# dil belirtiminin İlişkisel ve tür testi işleçleri bölümüne bakın.
Kayıt türlerinin eşitliği hakkında daha fazla bilgi için, kayıtlar özellik teklifi notunun Eşitlik üyeleri bölümüne bakın.