簡體   English   中英

C#:關於ToUpper()和ToLower()的困惑

[英]C#: Confusion about ToUpper() and ToLower()

如果我做這樣的事......

String myVar = "in";
if(myVar.ToUpper() == "in")
{
    //do something
}

這不會進入“if”阻止..正確嗎?

要么

它是否會檢查“in”和“IN”中的內容並執行其中的內容if if? 如果是這樣,為什么呢? 是不是應該跳過“if”塊里面的內容?

同樣的困惑也是關於ToLower()

編輯 :所以要檢查兩種情況,我需要寫:

if((myVar.ToUpper().Equals("in"))&&(myVar.Equals("in")))

像這樣......好嗎?

您應該使用可以不區分大小寫的相等比較,而不是轉換為大寫然后進行比較。 例如:

if (myVar.Equals("in", StringComparison.OrdinalIgnoreCase))
{
     ...
}

您應該仔細考慮哪些規則是合適的 - 序數,當前文化,不變文化,或者可能完全是另一種文化(例如使用StringComparer.Create(culture, true) )。

有關此內容的更多詳細信息,請閱讀.NET Framework中的MSDN 使用字符串最佳實踐一文。

表達式something.ToUpper().Equals("lowercaseletters")將永遠不會為true,因此在您的示例中,if-block將不會被執行。 當然,這也適用於ToLower; something.ToLower().Equals("UPPERCASE")永遠不會是真的。

“IN”不等於“in” - 因此它不執行if塊。 在toLower()的情況下,它將執行if塊作為“in”等於“in”..

首先,如果你想比較字符串使用.Equals()

myVar.toUpper().Equals("in")

第二個首先執行if中的所有代碼,然后才測試返回。

所以

String myVar="in";
if(myVar.toUpper().Equals("in"))
{
  //do something
}

不要“做某事”

如果你像你說的那樣做,它將不會進入if塊,這就是為什么:

運算符應用於左側的對象。 所以你的代碼和寫這個代碼一樣:

String myVar="in";
String testVar = myVar.ToUpper();
if(testVar=="in") //This will never be true
{
  //do something
}

在你的編輯中,你仍然沒有測試你的字符串是否為==“IN”,你正在進行2次測試以查看你的字符串是否為==“in”。

如果您將原件更改為此,則可以正常工作:

String myVar="in";
if(myVar.ToUpper()=="IN")
{
  //do something
}

您的編輯應該像這樣來測試兩種情況:

if((myVar.ToUpper().Equals("IN"))&&(myVar.Equals("in")))

編輯:史蒂文的評論中的一些更多解釋:

if((myVar.ToUpper().Equals("IN"))&&(myVar.Equals("in")))

該代碼示例進行了2次比較,但是如果myVar只是in(Windows:In InN IN)的混合大小寫版本,那么第二次比較就沒有必要了。 一旦我將字符串轉換為ToUpper(),您只需要檢查它是否等於IN。 所以我會用以下內容替換該行:

if(myVar.ToUpper().Equals("IN"))

要么

if(myVar.ToUpper() == "IN")

我個人會使用==而不是.Equals方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM