我经常发现自己处理的字符串与其他字符串的比较应该忽略大小写,即 Oracle 参数。我看到太多 ToUpper()
或 ToUpperInvariant()
。我考虑过构建一个包含对 string
的引用的小类,它的 getter 和 setter 会为我处理这个问题,但我想知道这种类是否内置于 .NET 或一些广泛的 -用过的图书馆。理想情况下,这样的类具有以下优点:
- 不需要转换
ToUpper()
(阅读下一篇了解为什么它不只是实现一个特殊的比较器) - 它会使用更少的内存(因为不需要存储与不同值具有相同值的
char
)- 即对于char
的某些子集将是一个将每个索引与其相反大小写索引的映射,根据语言为每个char
节省一些位数
编辑 0:我得到了第 1 点,我理解为什么使用 StringComparison
参数更好,但是编写一个单独的 Type
是不是不合理?默认情况下使用此 StringComparison
的 string
?否则,我会在看到此类字段的任何地方输入(username
、emailAddress
、vendorCode
等)
编辑 1:第 2 点怎么样?在字符串密集型应用程序中将所有 char
索引缩短至少 26 是否会浪费时间?也许措辞不正确...
编辑 2(更正数学):例如,在 #1 上,假设我有一个类似 Username
的字段,该字段始终持久化在某些遗留数据库中作为上层 via一个存储过程,并且这种逻辑太普遍了,无法在所有 DB 过程中进行更改。
我认为 char
的通常长度是 2^16,但假设我知道 DB 将其视为最多 2^8。因此,我不仅必须一遍又一遍地显式地编写 StringComparison
,而且应用程序还在每个 char
上浪费 8 位。如果我被迫在内存中存储大约 100000 个字符串用于某些操作,这意味着我被迫使用 10^5*8/(10^6 * 8) = 0.5 MB,这根本不是很多。
最佳答案
您可以使用 string.Equals
重载 String.Equals Method (String, String, StringComparison
),而不是调用 ToUpper
或 ToUpperInvariant
进行忽略大小写的字符串比较它采用 StringComparison
参数来指定忽略大小写。
if (string.Equals("ABC", "abc", StringComparison.InvariantCultureIgnoreCase))//true
{
}
或
if ("ABC".Equals("abc", StringComparison.InvariantCultureIgnoreCase))
{
}
关于c# - 是否有适用于 .NET 的内置或广泛使用的不区分大小写的字符串类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22761703/