Почему String.IndexOf(String, StringComparison)
требует StringComparison
и не учитывает более общий StringComparer
, или даже просто IComparer<T>
или IEqualityComparer<T>
?
Я сделал пользовательский StringComparer
для использованияс несколькими словарями, и я хочу использовать его в других частях моего проекта, но я не могу найти хороший способ сделать это без использования множества методов расширений, если бы они даже работали.
Этосравнил я сделал.Он был основан примерно на этой рекомендации: Реализация пользовательского IComparer со строкой
Также обратите внимание, что ModifyString является WIP.Я ожидаю добавить туда больше, основываясь на том, с чем сравниваю.Я также знаю, что это дорого, но я просто ищу решение банкомата, а не производительность.
public class CustomComparer : StringComparer
{
public override int Compare(string x, string y)
{
return StringComparer.Ordinal.Compare(ModifyString(x), ModifyString(y));
}
public override bool Equals(string x, string y)
{
if (ModifyString(x).Equals(ModifyString(y)))
return true;
else
return false;
}
public override int GetHashCode(string obj)
{
if (obj == null)
return 0;
else
return ModifyString(obj).GetHashCode();
}
private string ModifyString(string s)
{
//I know this code is expensive/naaive, your suggestions are welcome.
s = s.ToLowerInvariant();
s = s.Trim();
s = Regex.Replace(s, @"\s+", " ");//replaces all whitespace characters with a single space.
return s;
}
}