sourcecode

C#의 대소문자를 무시하고 두 문자열 비교

copyscript 2023. 4. 19. 23:24
반응형

C#의 대소문자를 무시하고 두 문자열 비교

다음 두 가지 중 어느 것이 더 효율적입니까? (혹은 더 나은 세 번째 옵션이 있을까요?)

string val = "AStringValue";

if (val.Equals("astringvalue", StringComparison.InvariantCultureIgnoreCase))

또는

if (val.ToLowerCase() == "astringvalue")

?

효율성을 원하는 경우 다음을 사용하십시오.

string.Equals(val, "astringvalue", StringComparison.OrdinalIgnoreCase)

서수 비교는 문화 인식 비교보다 훨씬 빠를 수 있습니다.

ToLowerCase하지만 같은 문자열과 많은 비교를 하는 경우에는 더 나은 옵션이 될 수 있습니다.

퍼포먼스 최적화와 마찬가지로 측정결정!

첫 번째 '솔루션'은 새로운 문자열 인스턴스를 인스턴스화하기 때문에 첫 번째가 올바른 것이고 IMHO가 더 효율적입니다.

.ToLowerCase버전은 고속화되지 않습니다.추가 문자열 할당(나중에 수집해야 함) 등이 필요합니다.

저는 개인적으로

string.Equals(val, "astringvalue",  StringComparison.OrdinalIgnoreCase)

이것은 문화에 민감한 문자열의 모든 문제를 피하지만, 결과적으로 문화에 민감한 문자열의 모든 문제를 피한다.당신만이 당신의 문맥에서 그것이 괜찮은지 알 수 있습니다.

사용방법string.Equalsstatic 메서드는 에 관한 문제를 회피합니다.val존재null.

"효율성"에 대한 이러한 질문에 대한 저의 일반적인 대답은 거의 항상 가장 읽기 쉬운 코드 버전이 가장 효율적이라는 것입니다.

그렇다고는 할 수긍할 수 없다(val.ToLowerCase() == "astringvalue")대부분의 사람들이 한 눈에 알 수 있습니다.

제가 언급하는 효율은 코드 실행에 필수적이기보다는 해당 코드의 유지관리 및 일반적인 가독성에 있습니다.

가장 안전한 방법은 정적인 방법을 사용하여 감염의 가능성을 완화하는 것입니다NullReferenceException만약의 경우null.

전자가 가장 빠르다.알고 보니val는 불변하기 때문에 String을 사용하여 새로운 문자열 오브젝트가 생성됩니다.ToLowerCase()는 문자열 비교기와의 직접 비교뿐만 아니라1초에 여러 번 이 작업을 수행할 경우 새 문자열 개체를 만드는 데 많은 비용이 소요될 수 있습니다.

C#문자열 비교 메서드의 차이점에 대해 이미 답변한 질문도 확인할 수 있습니다.

첫 번째가 더 효율적이며 가능한 최선의 옵션입니다.val.ToLowerCase()문자열은 불변하기 때문에 새로운 오브젝트를 만듭니다.

언급URL : https://stackoverflow.com/questions/6371150/comparing-two-strings-ignoring-case-in-c-sharp

반응형