SORU
22 Ocak 2014, ÇARŞAMBA


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
22 Ocak 2014, ÇARŞAMBA


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çinde string 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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Bokeh

    Bokeh

    9 HAZİRAN 2014
  • Distractify

    Distractify

    1 Aralık 2011
  • Floortile83

    Floortile83

    16 Ocak 2010