c# - 是否有适用于 .NET 的内置或广泛使用的不区分大小写的字符串类型

标签 c# .net vb.net string

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

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

编辑 0:我得到了第 1 点,我理解为什么使用 StringComparison 参数更好,但是编写一个单独的 Type 是不是不合理?默认情况下使用此 StringComparisonstring?否则,我会在看到此类字段的任何地方输入(usernameemailAddressvendorCode 等)

编辑 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),而不是调用 ToUpperToUpperInvariant 进行忽略大小写的字符串比较它采用 StringComparison 参数来指定忽略大小写。

if (string.Equals("ABC", "abc", StringComparison.InvariantCultureIgnoreCase))//true
{

}

if ("ABC".Equals("abc", StringComparison.InvariantCultureIgnoreCase))
{
}

关于c# - 是否有适用于 .NET 的内置或广泛使用的不区分大小写的字符串类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22761703/

相关文章:

用于存储最近列表的.NET集合类型

c# - 写入在 Excel 中打开的文件

c# - 使用 dll 中的 ViewModel 进行 UserControl

c# - 使用XmlArray反序列化xml文件?

vb.net - system.net.mail isbodyhtml = true 与两个 AlternateView 的优缺点

.net - 如何自动将 datetimepicker 值设置为所选月份的 1 号?

vb.net - 用于自动添加事件委托(delegate)方法的 Visual Studio 快捷方式

c# - 如何在 C# 中限制文件对话框文件名中的特殊字符?

C# 错误 - 找不到命名空间 ManagementClass、ManagementObject 和 ManagementObjectCollection

c# - 我们的 C# 类成员有多少(多少) 'private'?