免责声明:也许是微YAGNI优化,但听我说..
问题是要实现不区分大小写的查找表。
StringComparer.InvariantCultureIgnoreCase
。我认为它会委托给String.Compare(x,y,SomeIgnoreCaseEnum)新方法的优点在于我不需要确保在针对字典进行查找的n个位置中的每个位置执行.ToUpper()。
我的问题是哪一个更有效率?只是好奇我猜...
更新:注意我不需要知道插入的原始密钥。此外,使用的密钥与文化无关。
答案 0 :(得分:3)
可能上层套管会更有效率,因为它可以进行序数比较......但我非常怀疑这对你来说是一个性能瓶颈。与以往一样,在您根据性能提交代码更改之前进行配置。
最终,指定字符串比较:
答案 1 :(得分:1)
检查entry。它今天仍然有效。
摘录:来自MSDN的“New Recommendations for Using Strings in Microsoft .NET 2.0”
答案 2 :(得分:1)
我不知道性能,但我更喜欢StringComparer选项。使用ToUpper,您将丢失信息(原始大小写)。确实你可能不需要它,但是有一天你可能并且不再需要做任何工作(因此不受YAGNI原则的限制)。
我有一天也会忘记打电话给ToUpper并处于一个受伤的世界。但我的单元测试当然会救我。
答案 3 :(得分:0)
我已经接受了Oded的'Go profile!'评论:)这是一个明显的主要建议。
从我的考试(source code here)
对于1M ContainsKey查找,
我发现带有注入Comparer选项的Dictionary可以更好地减少麻烦。所以没有ToUpper()对我来说。