2010-03-02 24 views
7

Google'da ihtiyacım olanı bulamıyorum ve burada hızlı yanıt alacağım.C# koşullu operatörünü kullanarak derleyici hatası

String str; 
    bool b = true; 
    b ? str="true" : str="false"; 

    Console.Out.WriteLine(str); 

bu? : sözdizimi bana doğru görünüyor. Yine de derleyici hatası alıyorum.

program.cs (13,28):
hata CS1002:; beklenen
program.cs (13,28):
hata CS1525: geçersiz ifade terimi ':'
program.cs (13,30):
hata CS1002:; beklenen

Csharp sözdiziminden emin değilsiniz, ancak bu, cpp'de oluşturulur. Lütfen yardım et! Teşekkürler!

GÜNCELLEME: Yaklaşık 10 tanesinin doğru cevabını verin LOL, bu yüzden yalnızca gönderen ilk kişiye vereceğim.

ilginç Sözdizimi ve b ++ sözdiziminden daha çok beğendiğimi düşünüyorum.

ben bu yaptığını asıl kodudur:

ftp.ConnectMode = job.FTPUsePassiveMode ? FTPConnectMode.PASV : FTPConnectMode.ACTIVE; 
+0

Diğerleri zaten uygun çözümü verdi; öncelik sırasının problem olması mümkündür. b? (str = "true"): (str = "false"); 'Bu işe yarasa bile, onu böyle kullanmazdım. – Matthew

+0

@cchampion: "ilginç bir sözdizimi ve b ++ sözdizimini daha çok beğeniyorum." - C++ sözdizimi aynıdır. Str = b olmalı? Her iki dilde "doğru": "yanlış". – Josh

cevap

15

Kodunuz okumalısınız: Ancak

str = b ? "true" : "false"; 

, bu sadece b.ToString().ToLower() arayarak benzer. Yani, gerçek kullanım durumunuzun, Boole değerini bir dizeye dönüştürmekten biraz daha karmaşık olduğundan şüpheleniyorum.

Güncelleme yorumlarda belirtildiği gibi
, conditional operator bir değer döndürür; if/else gibi kontrol akışı için değildir.

+8

İlgili nokta, üçlü operatörün (? :) bir kontrol akışı mekanizması değil, bir değer döndüren bir ifadedir (eğer/else gibi). –

+0

@Tyler: İyi dedi. – Josh

15
str = b ? "true" : "false"; 

Ama sadece bu yapabilirdi:

str = b.ToString(); 

Hatta tamamen aracıyı kesip:

Console.WriteLine(b); 
+0

Kesin olarak, "Doğru" ve "Yanlış" ı ToString() 'den (ve böylece WriteLine), "doğru" ve "yanlış" değil, ama benim için önemli olduğuna emin değilim. ToString() ToLower() öğesini her zaman yapabilirsiniz. – tvanfosson

1
str = (b) ? "true" : "false"; 
+0

Fakat ... Neden parantez içinde "b" harfi kapılıyor? Çözdüğü belirsizliği göremiyorum. –

4

üçlü operatör deyim geçiş için izin vermez, sadece değer değişimi.

str= b ? "true" : "false" 

(besbelli b.ToString()) bu belirli sorun için iyi bir çözüm, ama) bu sadece bir örnektir varsayıyorum: Bunu yapmak istiyorum.

+0

ifade seçimi ... ve str = "true" Bir ifade var. A = b'yi dene? (str = "true"): (str = "false"); ve bence bunun gayet iyi çalıştığını göreceksiniz. –

+0

Ve bu geçerli C++ kodu olduğu noktayı ele almak için, C++ değerlerini almak için deyimleri kullanabilirsiniz çünkü. Yani aşağıdaki C++ (çok kafa karıştırıcı olsa da) geçerli olacaktır: 'a = b? c = d: c = f' – Josh

+0

@Ben: Evet, ifade seçimi daha iyi bir terimdir ve ödev bir ifadedir (lvalue içine yerleştirilen değeri döndürür), ancak üçlü operatörün çıktısı göz ardı edilemez. –

0

üçlü operatördür, C# açıklamada üst düzey olamaz.Sadece meraktan

-1

, neden sadece bunu: NET'te

bool b = true; 
string str = b.ToString(); 

, değer türleri otomatik bir dizeye kendi değerini dönüştürmek Boolean dahil ...() denir .ToString zaman.

+0

bu iyi bir öneri olsa da, bu durumda üçlü operatörün neden çalışmadığı sorusuna cevap vermiyor. – Josh

+0

Sorun, sorunu tamamen ortadan kaldırmaktı. Diğer cevaplar neden işe yaramadığını yeterince açıkladı (çünkü yanlış kullanıyordu.) Cevapları tekrarlamaktan hoşlanmıyorum, özellikle de aynı grupta olduğu zaman. Sorunun açık bir şekilde cevaplanmasa bile, sorunun geçerli bir çözümü olduğu için bu durumun oylamayı hak ettiğini düşünmüyorum. – jrista

İlgili konular