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