2017-11-30 4 views
-2

私は文字列のリストを持っており、そのうちの1つが針文字列と一致するかどうかを調べようとしています。この方法は、デフォルトの比較とは異なる振る舞いを持ちbeahavior、そのように私は何を変更する必要があります含まれていないのはなぜList.Containsメソッドを使用して文字列を検索するとfalseが返されますが、手動による比較はtrueを返します

listOfStrings.Contains(needle); // return false 
listOfStrings[0] == needle; // return true 

:文字列のリストは、最初のインデックスで針が含まれている、と私のコードは次のように動作しています同じことが生まれている?

私が直面している問題についてのより詳細な情報を得るために、私はWinFormテキストボックスの文字列を処理しています。入力パスと宛先フォルダを表します。

 if (!destinationPath.EndsWith("\\")) 
     { 
      destinationPath += "\\"; 
     } 
     List<string> inputDirectories = new List<string>(inputPaths.Length); 
     foreach (string path in inputPaths) 
     { 
      inputDirectories.Add(Path.GetDirectoryName(path).ToLower()); 
     } 

     bool comparison1 = inputDirectories[0] == Path.GetDirectoryName(destinationPath.ToLower()); // return true 
     bool comparison2 = inputDirectories.Contains(Path.GetDirectoryName(destinationPath.ToLower())); // return false 
+3

見てみるにはいくつかの例が必要です。これは十分な情報ではありません。 – NendoTaka

+1

使用している文字列に関する情報をもう少し教えてください。いくつかの例。 –

+3

あなたが助けを求めている人々に、問題の原因を推測させる必要はありません。この問題をコンパイルして実証する*明確で短い例を与える*。 –

答えて

1

あなたは何をあなたのリストを入力することであるが、それはArrayListまたはList<object>をかどうCompareメソッドはオブジェクトではなく文字列を比較するので、比較は、List<string>から異なる結果を与えると述べていません。次のコードを実行してみて、これを理解するには

string s1 = "A"; 
string s2 = "AB"; 

s1 += "B"; 

Console.WriteLine(s1 == s2); // True 
Console.WriteLine((object)s1 == (object)s2); // False 

s1s2は文字列として比較すると等しいが、異なるオブジェクトです。

すでにList<string>を使用していて、大文字と小文字を区別しないContainsを探している場合は、the accepted answer to this questionという手法を試してみてください。

+0

申し訳ありませんが、正確な答えをいただきありがとうございます。リストを使用して、参照ではなく値に基づいて文字列を比較する方法がありますか?または、ArrayListをList に使用する必要がありますか? – Toto

+1

@Toto - 更新を参照してください。 – Joe

+3

@Toto:ArrayListを使用する唯一のシナリオは、時間旅行者に誘拐され、過去に奪われ、C#1.0しか持たない世界に抱かれていることです。必ずジェネリックタイプを使用してください。 –

関連する問題