2016-03-31 17 views
0
ben aşağıdaki kod parçası var gerçekten garip bir sorun yaşıyorum

vererek karşılaştıran 8.1: Board düğmeleri bir dizi ve a, b iseWindows Phone Control.Content yanlış sonuç

for (int i = 0; i < Board.Length - 2; i++) 
{ 
    var a = Board[i].Content; 
    var b = Board[i + 1].Content; 
    var c = Board[i + 2].Content; 
    if (a == b && a == c && 
     (string) a != string.Empty && a != null) 
    { 
     MessageDialog msd = new MessageDialog("test"); 
     await msd.ShowAsync(); 
    } 
} 

sahip c "1" aynı değeri. Ancak if deyiminde bunları karşılaştırırken hepsi yanlış mı veriyor? Dize boş veya boş olup olmadığını kontrol ettiğim diğer ifadeler true değerini verir.

+0

'a',' b' ve 'C' çeşitleri nelerdir? If ifadesinin içindeki dökümden, sanırım onlar "nesneler", yani değer eşitliği karşılaştırması yerine referans eşitliği karşılaştırması yapıyorsunuz demektir. –

+0

Haklısınız. Control.text bir dizeyle sonuçlanacak, ancak içerik dizgeyi döndürmüyor. Metinlerin kontrollerini nasıl karşılaştırabilirim? Content.ToString() 'i yapmanın tek yolu var mı? – KOPEUE

cevap

1

Değer eşitliği karşılaştırması yerine bir referans eşitliği karşılaştırması gerçekleştiriyorsunuz. Kodunuz aşağıdaki equivelent edilir:

for (int i = 0; i < Board.Length - 2; i++) 
{ 
    object a = Board[i].Content; 
    object b = Board[i + 1].Content; 
    object c = Board[i + 2].Content; 
    if (a == b && a == c && 
     (string) a != string.Empty && a != null) 
    { 
     MessageDialog msd = new MessageDialog("test"); 
     await msd.ShowAsync(); 
    } 
} 

Bu a == bObject.ReferenceEquals(a, b) bir karşılaştırma equivelent hangi sonuçları <object> == <object> yerine <string> == <string> olarak çözümlenen devam ettiği anlamına gelir. Değer eşitliği almak için hemen a, b ve c'u kullanmalısınız. Şimdi a bir dizesi olduğunu, manuel olarak da hem kontrol yerine String.IsNullOrEmpty kullanabilirsiniz:

for (int i = 0; i < Board.Length - 2; i++) 
{ 
    string a = (string)Board[i].Content; 
    string b = (string)Board[i + 1].Content; 
    string c = (string)Board[i + 2].Content; 
    if (a == b && a == c && !String.IsNullOrEmpty(a)) 
    { 
     MessageDialog msd = new MessageDialog("test"); 
     await msd.ShowAsync(); 
    } 
} 
+1

Açıkçası daha önce işe yaramadı çünkü nesneler oldukları için, şimdi dizeleri olduklarını varsayalım ki eğer ''string.IsNullOrEmpty (a)' – KOPEUE

+1

İyi bir noktaya geçiş yapabilirsiniz. Bunu yapmak için cevabı düzenledim. –