是否有适用于 .NET 的内置或广泛可用的无大小写字符串类型

本文关键字:大小写 类型 字符串 适用于 NET 内置 是否 | 更新日期: 2023-09-27 17:55:12

我经常发现自己在处理与其他字符串进行比较应该忽略大小写的字符串,即 Oracle 参数。我看到太多ToUpper()ToUpperInvariant().我考虑过构建一个小类,其中包含对string的引用,其 getter 和 setter 为我处理这个问题,但我想知道这种类是否内置到 .NET 或一些广泛使用的库中。理想情况下,这样的类将具有以下优点:

  1. 无需转换ToUpper()(阅读下一个内容,了解为什么它不只是实现一个特殊的比较器)
  2. 它将使用更少的内存(因为不需要存储与非重复值具有相同值的char) - 即对于char的某些子集,将有一个映射将每个索引带到其大小写相反的索引,根据语言,每char节省一些位数

编辑 0:我得到点 #1,我理解为什么最好使用 StringComparison 参数,但是默认情况下编写使用此StringComparison的单独string Type不合理吗?否则,我在任何地方都看到这种字段(usernameemailAddressvendorCode等)

输入。

编辑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,这根本不是很多。

是否有适用于 .NET 的内置或广泛可用的无大小写字符串类型

与其调用 ToUpperToUpperInvariant 进行字符串比较忽略大小写,不如使用 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 选项。