C# .NET是否有内置的或广泛可用的未加密字符串类型
我经常发现自己处理的字符串与其他字符串的比较应该忽略大小写,即Oracle参数。我看到太多的C# .NET是否有内置的或广泛可用的未加密字符串类型,c#,.net,vb.net,string,C#,.net,Vb.net,String,我经常发现自己处理的字符串与其他字符串的比较应该忽略大小写,即Oracle参数。我看到太多的ToUpper()或ToUpper()。我曾考虑构建一个小类,其中包含对字符串的引用,该字符串的getter和setter为我处理这个问题,但我想知道这种类是内置在.NET还是一些广泛使用的库中。理想情况下,此类课程将具有以下优势: 无需转换ToUpper()(阅读下一篇文章,了解为什么它不只是实现一个特殊的比较器) 它将使用更少的内存(因为不需要存储与不同值具有相同值的chars)-即对于char的某些
ToUpper()
或ToUpper()
。我曾考虑构建一个小类,其中包含对字符串的引用,该字符串的getter和setter为我处理这个问题,但我想知道这种类是内置在.NET还是一些广泛使用的库中。理想情况下,此类课程将具有以下优势:
无需转换ToUpper()
(阅读下一篇文章,了解为什么它不只是实现一个特殊的比较器)
它将使用更少的内存(因为不需要存储与不同值具有相同值的char
s)-即对于char
的某些子集,将有一个映射将每个索引带到其大小写相反的索引,根据语言的不同,每个char
可以节省一些位
编辑0:我得到了第1点,我理解为什么使用StringComparison
参数更好,但是对默认情况下使用此StringComparison
的字符串的单独类型进行编码是否合理?否则,我会在我看到的每一处输入这种类型的字段(username
,emailAddress
,vendorCode
,等等)
编辑1:第2点呢?在一个字符串密集型应用程序中,将所有char
索引至少缩短26,是否会浪费时间?也许这句话的措词不对
编辑2(修正数学):例如,在#1上,假设我有一个类似于
用户名
-的字段,该字段总是通过存储过程作为上层保存在某些旧数据库中,并且该逻辑太普遍,无法在所有数据库过程中更改
我想,char
的通常长度是2^16,但假设我知道DB将其视为最多2^8。因此,我不仅必须一次又一次地显式编写StringComparison
,而且应用程序每char
浪费8位。如果我被迫为某些操作在内存中存储大约100000个字符串,这意味着我不得不使用10^5*8/(10^6*8)=0.5MB,这一点都不多。不,没有。.NET中只有一种字符串类型-System.string
String.Equals可能有IgnoreCase选项。不,没有。.NET中只有一种字符串类型-System.string
String.Equals可能有一个IgnoreCase选项。对于忽略大小写的字符串比较,您可以使用String.Equals
重载,该重载使用StringComparison
参数来指定忽略大小写,而不是调用ToUpper
或ToUpperInvariant
if (string.Equals("ABC", "abc", StringComparison.InvariantCultureIgnoreCase))//true
{
}
或
不必调用ToUpper
或ToUpperInvariant
进行字符串比较忽略大小写,您可以使用string.Equals
重载,该重载使用StringComparison
参数指定忽略大小写
if (string.Equals("ABC", "abc", StringComparison.InvariantCultureIgnoreCase))//true
{
}
或
如果您看到大量的touper
,那么您就看不到像样的代码。记住turkish I问题,您应该看到的是对比较函数等的调用,这些函数具有传递给它们的IgnoreCase
选项。您是否尝试搜索?@crashmstr see request#2@crashmstr并编辑了#1。我在这里扮演魔鬼的倡导者,但我也对为什么目前还不存在的原因有点好奇。“TaSoSoTasoStCasoSOS:关于你的第一个编辑,考虑把比较工作移到一个静态的实用方法或扩展方法,来为你做这个标准比较。(这也将有助于避免违反DRY)编辑:关于您的其他编辑,我想知道这是否是过早优化的情况。在CLR中使用字符串是相当不错的(只要你不滥用它们)。如果你看到大量的ToUpper
,你就看不到像样的代码。记住turkish I问题,您应该看到的是对比较函数等的调用,这些函数具有传递给它们的IgnoreCase
选项。您是否尝试搜索?@crashmstr see request#2@crashmstr并编辑了#1。我在这里扮演魔鬼的倡导者,但我也对为什么目前还不存在的原因有点好奇。“TaSoSoTasoStCasoSOS:关于你的第一个编辑,考虑把比较工作移到一个静态的实用方法或扩展方法,来为你做这个标准比较。(这也将有助于避免违反DRY)编辑:关于您的其他编辑,我想知道这是否是过早优化的情况。在CLR中使用字符串是相当不错的(只要你不滥用它们)。如果你的unicode是标准化的(而且很可能是)StringComparison。OridAlignOreCase
更快。@MattWilko,重载支持忽略大小写。具有用于区分大小写比较的重载,如果您的unicode已规范化(可能是)StringComparison,则可以使用该重载代替Contains
。OridAlignOreCase
更快。@MattWilko,重载支持忽略大小写。具有用于敏感情况下比较的重载,可用于代替Contains