Мне нужно сделать много высокопроизводительных сравнений строк без учета регистра, и я понял, что мой способ сделать это .ToLower (). Trim () был действительно глупым из-за того, что все новые строки были выделены
Итак, я немного покопался, и этот способ кажется предпочтительным:
String.Compare(txt1,txt2, StringComparison.OrdinalIgnoreCase)
Единственная проблема здесь в том, что я хочу игнорировать начальные или конечные пробелы, то есть Trim (), но если я использую Trim, у меня та же проблема с распределением строк. Я думаю, что я мог бы проверить каждую строку и посмотреть, если она StartsWith ("") или EndsWith (""), и только тогда Trim. Либо так, либо вычислите индекс, длину для каждой строки и передайте строку. Сравнение переопределения
public static int Compare
(
string strA,
int indexA,
string strB,
int indexB,
int length,
StringComparison comparisonType
)
но это кажется довольно запутанным, и мне, вероятно, придется использовать некоторые целые числа, если я не сделаю действительно большого оператора if-else для каждой комбинации конечных и ведущих пробелов в обеих строках ... так есть ли идеи элегантного решения?
Вот мое текущее предложение:
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);
}
}