大文字と小文字を区別しない高性能の文字列比較をたくさん行う必要があり、それを行う私の方法 .ToLower().Trim() は、割り当てられているすべての新しい文字列を行うため、本当にばかげていることに気付きました
だから私は少し掘り下げましたが、この方法が望ましいようです:
String.Compare(txt1,txt2, StringComparison.OrdinalIgnoreCase)
ここでの唯一の問題は、先頭または末尾のスペース、つまり Trim() を無視したいということですが、Trim を使用すると、文字列の割り当てで同じ問題が発生します。各文字列をチェックして、それが StartsWith(" ") か EndsWith(" ") かを確認してから、Trim することができると思います。それか、各文字列のインデックスと長さを把握し、string.Compare オーバーライドに渡します。
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);
}
}