2012-03-30 97 views
3

這是否有意義? MyValue可以是「true」或「false」Stringcomparison OrdinalIgnoreCase爲真的假值

它應該不是Stringcomparison.OrdinalIgnoreCase?

MyValue.Equals("true", StringComparison.CurrentCultureIgnoreCase)) 
+0

'MyValue.ToLower()等於( 「真」)' – 2012-03-30 12:58:47

+2

@AmenAyach:這是不正確的。 「ToLower」是依賴於文化的,因此不應該用於* not * culture-dependent的比較。像這樣的事情可能會導致很難在本地化應用程序中發現錯誤。 – 2012-03-30 12:59:37

回答

0

這真的取決於你的情況以及你的程序的其餘部分是如何製作的。從上OrdinalCompareCase

該文檔由OrdinalIgnoreCase屬性返回的StringComparer對待字符串中的字符進行比較,就好像它們被轉換使用不變區域性的約定爲大寫,然後執行一個簡單的字節比較即獨立於語言。比較以編程方式生成的字符串或比較不區分大小寫的資源(如路徑和文件名)時,這是最合適的。

所以基本上,如果值是文化獨立(progamatically產生等)使用OrdinalIgnoreCase

2
Bool.Parse 

looks better to me.

+1

好吧,'TryParse'。不要讓煩人的例外發生。 – jason 2012-03-30 13:02:30

+1

一般來說是的,但如前所述,這個值只能是「真」或「假」,所以別的都是例外。我不想壓制這一點。如果OP有辦法處理它,他們應該使用'TryParse' – Jodrell 2012-03-30 13:04:03

+1

正確,因此請檢查'TryParse'的返回值並進行相應的處理。 – jason 2012-03-30 15:53:09

4

我不會那麼做的。僅僅因爲字符串不等於"true"並不意味着它等於"false"。這是一個簡單的方法,讓醜陋的錯誤滑。我想你應該解析字符串

bool value; 
if(!Boolean.TryParse(MyValue, out value)) { 
    // it did not parse 
} 
// it parsed 

這更可能是正確的,這是更具可讀性。另外,文化問題已經席捲了地毯。