为什么String.IndexOf(String, StringComparison)
需要StringComparison
而不允许更通用StringComparer
,甚至只允许IComparer<T>
或IEqualityComparer<T>
?
我创建了一个自定义StringComparer
以用于多个词典,我想在项目的其他部分使用它但是如果不使用大量的扩展方法,我找不到一个好方法,如果那些甚至可以工作。
这是我制作的比较器。它大致基于这一建议:Implementing custom IComparer with string
另请注意,ModifyString是WIP。我期望在那里添加更多东西,基于我正在比较的输入。我也知道它很贵,但我只是在寻找解决方案ATM,而不是性能。
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;
}
}
答案 0 :(得分:1)
使用Sent: getId,03
(HEX) > A5 81 52 CS
的便捷扩展程序似乎已经存在,您可以编写IEnumerable
扩展程序以使用String
。正如评论中所建议的那样,所有可能的子字符串长度都在每个位置进行测试,因为不能对自定义StringComparer
做出任何假设。
StringComparer