String.comparison wydajność (z wykończeniem)

Muszę wykonać wiele wysokowydajnych porównań łańcuchów bez rozróżniania wielkości liter i uświadomić sobie, że mój sposób na to .ToLower (). Trim () był naprawdę głupi z powodu przydzielania wszystkich nowych ciągów

Więc trochę się przekopałem i ten sposób wydaje się lepszy:

String.Compare(txt1,txt2, StringComparison.OrdinalIgnoreCase)

Jedynym problemem jest to, że chcę zignorować spacje wiodące lub końcowe, tj. Trim (), ale jeśli używam Przytnij, mam ten sam problem z przydzielaniem ciągów. Myślę, że mógłbym sprawdzić każdy ciąg i sprawdzić, czy zaczyna się od ("") lub EndsWith ("") i tylko wtedy Trim. Albo wymyśl indeks, długość każdego łańcucha i przekaż do string. Porównaj zastąpienie

public static int Compare
(
    string strA,
    int indexA,
    string strB,
    int indexB,
    int length,
    StringComparison comparisonType
) 

ale to wydaje się dość niechlujne i prawdopodobnie muszę użyć kilku liczb całkowitych, jeśli nie zrobię naprawdę dużej instrukcji if-else dla każdej kombinacji końcowych i wiodących spacji na obu łańcuchach ... więc wszelkie pomysły na eleganckie rozwiązanie?

Oto moja obecna propozycja:

public bool IsEqual(string a, string b)
    {
        return (string.Compare(a, b, StringComparison.OrdinalIgnoreCase) == 0);
    }

    public bool IsTrimEqual(string a, string b)
    {
        if (Math.Abs(a.Length- b.Length) > 2 ) // if length differs by more than 2, cant be equal
        {
            return  false;
        }
        else if (IsEqual(a,b))
        {
            return true;
        }
        else 
        {
            return (string.Compare(a.Trim(), b.Trim(), StringComparison.OrdinalIgnoreCase) == 0);
        }
    }

questionAnswers(8)

yourAnswerToTheQuestion