2010-05-17 21 views
6

Boolean'a "0" dizgisini dönüştürmeyi denemenin başarısız olacağını, bunun nasıl düzeltileceğini de biliyorum, Jon Skeets'in diğer sorulara verdiği cevaplar sayesinde.Convert.ToBoolean ("0") neden başarısız?

Bilmek istediğim, NEDEN, "boolean" dönüşümü için geçerli bir girdi olarak "0" değerini tanımıyor, kesinlikle 0 = yanlış, 1 = doğru, hatta -1 = yanlış ve 0 = true, neyse, mantığım bana geçerli bir girdi olabileceğini söylüyor, bu yüzden onun neden olmasın çok iyi bir nedeni var mı? Bahisim eskidir, vb6 geçerli "0" string girişini tanıyabilecektir.

+0

Burada ilgilenenler için dönüştürmek için doğru yolu - http://stackoverflow.com/questions/2606406/convert-toboolean1-throws-system-format-exception-in-c –

+2

Ayrıca şunları kullanabilirsiniz: Sistem .Xml.XmlConvert.ToBoolean (string), "0" ve "1" kabul eder. –

+1

"XmlConvert" un "küçük harf" için "doğru" ve "yanlış" olmasını gerektirdiğini unutmayın. –

cevap

8

yani, çünkü basit bir cevap Yöntemin tanımlandığı şekilde. Ancak, C# 0 içinde false için değerlendirmez, bu yüzden "0" dönüştürme kullanılarak false dönüştürülecek olsaydı şaşırtıcı olurdu.

+0

çok ilginç, bu yüzden bir Convert.ToBoolean (Convert.ToInt16 ("0")) da başarısız olur? –

2

Değer içeren bir dize her zaman doğruya ve hatta boş bir dizgeye dönecektir.

+0

Neden bu, biraz daha ayrıntılı olarak açıklayabilir misiniz? –

+0

Gerçekten bu algoritmayı çalıştırmanız gerekiyorsa int.TryParse ("0", out i); sonra o i dönüştürmek için –

2

Benim tahminim, çünkü bir .NET programına gelen bir C programcısı karışık olabilir, çünkü C '0' karakterinin düz bir değeri 'true' olarak değerlendirilirken, '' 0 'yanlış' olarak değerlendirirdi.

(null karakteri aslında sıfırların bayt dolu ve '0' karakteri vs/Unicode sıfır olmayan ASCII/değil olmasıdır.)

+0

Dil saflığı ile ilgili herhangi bir şey olabilir mi? –

+0

Sanırım her şeyden daha öngörülebilirlik ve muhafazakarlık hakkında daha fazla. –

2

Bu oldukça basittir, Convert.ToBoolean (String), Boolean.TryParse() öğesini çağırır. Sadece "Doğru" veya "Yanlış" kabul eder. Seçenekleri genişletmek isterseniz, daha esnek bir sisteme sahip .NET dilleri vardır.

bool b = (bool)Microsoft.VisualBasic.CompilerServices.Conversions.ToBoolean("0"); 

bu yöntem mantıklı değerin belirtilen dize temsilini dönüştürür msdn yukarıdaki bağlantıya göre Microsoft.VisualBasic.dll için

+0

Bu pek yararlı bir yorum değil mi? – Karlth

+1

Haklısınız, yorumunuz yardımcı olmadı. –

+0

O zaman "** Bu ** çok yardımcı bir yorum" diyecekti. :) – Karlth

1

Aynı sebepten dolayı aşağıdaki kodlar derlenmeyecektir. Eğer parametre olarak "0" verdiğinizde

bool value = 0; 
//error CS0031: Constant value '0' cannot be converted to a 'bool' 
0

o kadar bir dize değeri dikkate alır. Ve dize, 0 veya 1 olup olmadığı için boole dönüştürülemez.

İlgili konular