내가 있다면 대소 문자를 구분하지 않는 Dictionary<String,...>
방법을 만들 수 ContainsKey
있습니까?
이것은 관련이있는 것처럼 보였지만 제대로 이해하지 못했습니다 : c # Dictionary : 선언을 통해 키를 대소 문자를 구분하지 않습니다
내가 있다면 대소 문자를 구분하지 않는 Dictionary<String,...>
방법을 만들 수 ContainsKey
있습니까?
이것은 관련이있는 것처럼 보였지만 제대로 이해하지 못했습니다 : c # Dictionary : 선언을 통해 키를 대소 문자를 구분하지 않습니다
답변:
이것은 관련이있는 것처럼 보였지만 제대로 이해하지 못했습니다 : c # Dictionary : 선언을 통해 키를 대소 문자를 구분하지 않습니다
실제로 관련이 있습니다. 해결책은 사전 인스턴스에 표준 문자열 비교 방법 (대소 문자 구분)을 사용하지 말고 대소 문자를 구분하지 않는 것입니다. 이것은 적절한 생성자를 사용하여 수행됩니다 .
var dict = new Dictionary<string, YourClass>(
StringComparer.InvariantCultureIgnoreCase);
생성자는 IEqualityComparer
키를 비교하는 방법을 사전에 알려주 는를 기대 합니다.
StringComparer.InvariantCultureIgnoreCase
IEqualityComparer
대소 문자를 구분하지 않고 문자열을 비교 하는 인스턴스를 제공합니다 .
타사 또는 외부 dll에서 가져온 사전을 다루는 경우는 거의 없습니다. linq 사용
YourDictionary.Any(i => i.KeyName.ToLower().Contains("yourstring")))
Any
로 SingleOrDefault
받지 않습니다 당신 null
이 존재하지 않는 경우 다시, 대신 당신은에 키와 값 세트 모두와 keyvaluepair을 얻을 것이다 null
!
Contains
당시에 작업했던 것에 대한 매우 구체적인 유스 케이스처럼 보입니다. 더 일반적인 도움이되는 답변 Equals
으로 더 좋습니다. 같은 메모에서으로 문자열을 복제하는 대신 ToLower()
을 사용하는 것이 더 좋습니다 StringComparison.xxxCase
.
dict.Keys.Contains("bla", appropriate comparer)
를 위해 사용 편의성을 위해 LINQ 과부하를 사용하십시오.
ASP.NET Core 컨트롤러에서 caseINsensitive 사전이 필요한 동일한 종류의 문제가 발생했습니다.
트릭을 수행하는 확장 방법을 작성했습니다. 아마도 이것은 다른 사람들에게도 도움이 될 수 있습니다 ...
public static IDictionary<string, TValue> ConvertToCaseInSensitive<TValue>(this IDictionary<string, TValue> dictionary)
{
var resultDictionary = new Dictionary<string, TValue>(StringComparer.InvariantCultureIgnoreCase);
foreach (var (key, value) in dictionary)
{
resultDictionary.Add(key, value);
}
dictionary = resultDictionary;
return dictionary;
}
확장 방법을 사용하려면
myDictionary.ConvertToCaseInSensitive();
그런 다음 사전을 사용하여 값을 가져옵니다.
myDictionary.ContainsKey("TheKeyWhichIsNotCaseSensitiveAnymore!");
StringComparer.InvariantCultureIgnoreCase
있습니까? 그것은 무엇을 말하는가 ...