2017-11-30 8 views
-2

문자열 목록이 있는데 그 중 하나가 바늘 문자열과 일치하는지 확인하려고합니다. 문자열의 목록은 첫 번째 인덱스에서 바늘을 포함하고, 내 코드는 다음과 같은 문제가 있습니다문자열을 찾으려면 List.Contains 메서드를 사용하여 false를 반환하지만 수동 비교는 true를 반환합니다.

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

를 이유는 무엇입니까이 방법은 기본 비교 beahavior와 다른 동작을, 나는 그래서 그 무엇을 수정해야합니다 포함 똑같은 애비가 있습니까?

내가 직면하고있는 문제에 대해 더 많은 통찰력을주기 위해 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

좋아요. 정확한 답변을 주셔서 감사합니다. List 을 사용하여 참조가 아닌 값을 기준으로 문자열을 비교할 때 방법이 있습니까? 또는이 목적으로 ArrayList를 List 에 사용해야합니까? – Toto

+1

@ 사진 - 업데이트를 참조하십시오. – Joe

+3

@Toto : ArrayList를 사용해야하는 유일한 시나리오는 시간 여행자가 납치되어 과거로 이어지고 C# 1.0 만있는 세계에 머물러 있다는 것입니다. 항상 제네릭 유형을 사용하십시오. –