13

私がこのようなことをしたら...

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

これは「if」ブロックの中に入るつもりはありません。

また

「in」と「IN」の両方をチェックし、その中にあるものは何でもしますか?もしそうなら、それはなぜですか?「if」ブロックの中にあるものをスキップすることになっているのではないですか?

同じ混乱ToLower()

編集:両方のケースをチェックするには、次のように書く必要があります。

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

このように..右?

4

5 に答える 5

54

大文字に変換してから比較するのではなく、大文字と小文字を区別しないようにできる等式比較を使用する必要があります。例えば:

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

どのルールが適切であるかを慎重に検討する必要があります-順序、現在のカルチャ、不変のカルチャ、または場合によっては完全に別のカルチャ(たとえば、を使用StringComparer.Create(culture, true))。

これに関する詳細については、.NETFrameworkの記事の「文字列を使用するためのMSDNベストプラクティス」を参照してください。

于 2010-09-12T12:53:02.270 に答える
5

something.ToUpper().Equals("lowercaseletters")が真になることはないため、この例ではif-blockは実行されません。そしてもちろん、これはToLowerにも当てはまります。something.ToLower().Equals("UPPERCASE")どちらも真実になることはありません。

于 2010-09-12T12:48:34.550 に答える
2

「IN」は「in」と等しくないため、ifブロックは実行されません。toLower()の場合、「in」が「in」に等しい場合、ifブロックが実行されます。

于 2010-09-12T12:48:03.983 に答える
2

まず、文字列を比較する場合は、.Equals()を使用します

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

次に、if内のすべてのコードが実行され、その後でリターンがテストされます。

それで

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

「何かをする」ことはしないでください。

于 2010-09-12T12:48:38.483 に答える
2

あなたが言ったようなことをすると、それはifブロックに入りません、そしてここに理由があります:

左側のオブジェクトには演算子が適用されます。したがって、コードはこれを書くのと同じです。

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

編集では、文字列が== "IN"であるかどうかをまだテストしていません。文字列が=="in"であるかどうかを確認するために、2つのテストを行っています。

オリジナルをこれに変更した場合、それは機能します:

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(IE:in In iN IN)の大文字と小文字が混在するバージョンのみである場合、2番目の比較は必要ありません。文字列をToUpper()に変換したら、それがINに等しいかどうかを確認するだけで済みます。したがって、その行を次のように置き換えます。

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

また

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

私は個人的に.Equalsメソッドではなく==を使用します。

于 2010-09-12T13:21:07.087 に答える