(请注意,我不确定我的问题是“偏离主题”还是“主要基于意见” - 只需告诉我,我将删除该问题)
进行大量不区分大小写的字符串比较,我结束了许多冗长的陈述,如:
myList.FirstOrDefault(
c => string.Equals(
c.InternalName,
internalName,
StringComparison.InvariantCultureIgnoreCase));
困扰我的是StringComparison.InvariantCultureIgnoreCase
的长名称。
我可以考虑使用扩展方法等来缩短我必须编写的代码,但另一方面我害怕“混淆”我的代码,从而使其更难理解。
所以我的问题是:
是否有“最佳做法”,即必须编写较少的文本并仍然进行InvariantCultureIgnoreCase
式字符串比较?
答案 0 :(得分:3)
您可以将其包裹在Extension Method
:
public static class StringExtensions
{
public static bool EqualsCaseInsensitive(this string str, string other)
{
return string.Equals(str, other, StringComparison.InvariantCultureIgnoreCase);
}
}
然后执行:
myList.FirstOrDefault(
c => c.InternalName.EqualsCaseInsensitive(internalName))
答案 1 :(得分:2)
你可以这样做:
myList.FirstOrDefault(
c => string.Equals(
c.InternalName,
internalName,
(StringComparison)3);
无论如何......我认为你不应该担心这种事情。
修改强>
如果你想让它真的很短,你可以这样做:
using System;
using System.Collections.Generic;
using System.Linq;
using s = System.String;
using sc = System.StringComparison;
using l = System.Collections.Generic.List<Test.Test.c>;
namespace Test
{
class Test
{
private sc cic = sc.InvariantCultureIgnoreCase;
public class c
{
public s i;
}
private void Test(s i)
{
l ml = new l();
ml.FirstOrDefault(
c => s.Equals(
c.i,
i,
cic));
}
}
}
: - )
答案 2 :(得分:2)
您始终可以将其指定为常量:
public const StringComparison IGNORE_CASE= StringComparison.InvariantCultureIgnoreCase; //use whatever name you like
并将其放置在可以从您需要的任何地方引用的地方......(如果您需要在多个项目中使用它,就像在“实用程序”中一样)
现在你可以使用它而不是大枚举
myList.FirstOrDefault(
c => string.Equals(
c.InternalName,
internalName,
IGNORE_CASE));
答案 3 :(得分:1)
不知道框架中有任何捷径。如果你发现自己重复任何代码,你应该发挥作用。如果这是一个静态函数在许多地方都很有用,那么将它移到util类:
myList.FirstOrDefault(
c => Are.SameIgnoringCase(
c.InternalName,
internalName));
public static class Are {
public boolean SameIgnoringCase(string a, string b)
{
return string.Equals(a, b, StringComparison.OrdinalIgnoreCase);
}
}
我给了这个类一个相当神秘的名字,但它带来了很好的可读代码。
我在Microsoft recommendations之后添加了一项更改,因为您可能不需要进行不变的比较。另见:Using InvariantCultureIgnoreCase instead of ToUpper for case-insensitive string comparisons