문제

나는이 두 줄이 동일하다고 생각하지만 이상한 문제에 빠진 후에는 더 이상 이것이 사실이라고 생각하지 않습니다.

String mimeType = context.Request.ContentType;
(String.Compare("text/xml", mimeType, true) == 0))

와 같다 :

context.Request.ContentType.ToLower().Equals("text/xml")

CLR에서의 구현이 다릅니 까?

도움이 되었습니까?

해결책

그것들은 완전히 동등하지 않습니다. 보다 여기.

다음은 사례 둔감 한 비교를 수행하는 올바른 방법입니다.

bool areSame = str1.Equals(str2, StringComparison.OrdinalIgnoreCase);

이 방법은 또한 소문자에 대한 별도의 문자열을 할당하지 않기 때문에 더 효율적입니다.

다른 팁

그것들은 동등하지 않으며 Tolower/Toupper에는 일부 현지화 문제가있을 수 있습니다. 케이스 감수성없이 두 줄을 비교하는 방법 (문자열 중 하나를 고려하면 null이 될 수 있으므로 str1.equals 메소드가 마음에 들지 않는 이유)은 정적 문자열입니다.

bool areEqual = String.Equals(str1, str2, StringComparison.OrdinalIgnoreCase);

다른 답변 (@slaks, @serhio) 외에도 .tolower ()가 생성한다고 지적해야합니다. 또 다른 끈. 비교는 내가 아는 한 멀지 않습니다. 앱의 과도한 문자열 생성은 자주 코드라고하는 경우 메모리 사용 및 성능 측면에서 물기로 돌아올 수 있습니다.

.NET에서 비교 (문자열, 문자열, 부울)의 구현 :

public static int Compare(string strA, string strB, bool ignoreCase)
{
    if (ignoreCase)
    {
        return CultureInfo.CurrentCulture.CompareInfo.Compare(strA, strB, CompareOptions.IgnoreCase);
    }
    return CultureInfo.CurrentCulture.CompareInfo.Compare(strA, strB, CompareOptions.None);
}

그리고 동등합니다

[ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
public bool Equals(string value)
{
    if ((value == null) && (this != null))
    {
        return false;
    }
    return EqualsHelper(this, value);
}

그렇습니다 아니다 똑같은 것.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top