Dize karşılaştırma ve c nesne#
Bakın bu kod:
object x = "mehdi emrani";
string y = "mehdi emrani";
Console.WriteLine(y == x);
Yukarıda kodunu döndürür true
.
Ama bu kod:
object x = "mehdi emrani";
string y = "mehdi ";
y = "emrani";
Console.WriteLine(y == x);
Yukarıda kodunu döndürür false
.
Ne zaman dize karşılaştırmak ve ilk kod nesne true
olsun.
Ama ne zaman false
ben ikinci kod ile karşılaştırın.
İki dize ama ben dize eklemek neden zaman aynıdır , benim sonuç false
döner?
CEVAP
Her durumda, ==
ikinci işlenen tip object
x
. Normal referans eşitlik operatörü kullanıyorsun demektir.
İlk durumda, iki dize kullanıyorsunsabitleraynı içeriği ile. C# derleyicisi bu iki başvuru için tek bir nesne kullanır. İkinci durumda, x
y
aynı içeriği ile farklı dize nesneleri bakın. İki referanslar farklı olacak, ==
yanlış döndürür.
Karşılaştırma düzeltme yapabilirsiniz:
Bunun yerine
Equals
kullanıngeçersiz kılınmışstring
(sadece.==
operatörü olarak karşı tarafından ^em>aşırı yüklü:Console.WriteLine(y.Equals(x)); // or x.Equals(y), or Equals(y, x)
Equals(object, object)
statik yöntemini kullanın argümanlar da boş olabilir eğer yararlı olabilir;NullReferenceException
bir dert etmenize gerek yok demektir.Hem değişken tipi
string
, bu noktada,==
aşırı yük içindestring
olacak seçtin de derleme zamanı ve aşırı karşılaştırır içindekiler dizeleri, sadece referanslar
Sadece dize meselesi olmadığını belirterek C tarafından fark kendisi olmaya hazır değer# derleyici derleme zamanı sabiti ifadeleri ile ilgili. Örneğin:
object x = "mehdi emrani";
string y = "mehdi " "emrani";
Console.WriteLine(y == x); // True
Burada y
başlatılmış olan iki dize hazır bilgi kullanarakdeğilbir* *28, ama dize başlatmak için kullanılan aynı birleştirme zaten x
için kullanılan aynı dizgeyi gerçekleştiren derleyici tarafından yapılır.
Javascript Dize Yazın ve Dize Nesne ar...
Nasıl JavaScript dize karşılaştırma ya...
MySQL üzerinde SQL büyük / küçük harf ...
Nasıl Dize.Bir zaman aralığı biçimi öz...
InvariantCulture ve Sıra dize arasında...