C# .NET是否有内置的或广泛可用的未加密字符串类型

C# .NET是否有内置的或广泛可用的未加密字符串类型,c#,.net,vb.net,string,C#,.net,Vb.net,String,我经常发现自己处理的字符串与其他字符串的比较应该忽略大小写,即Oracle参数。我看到太多的ToUpper()或ToUpper()。我曾考虑构建一个小类,其中包含对字符串的引用,该字符串的getter和setter为我处理这个问题,但我想知道这种类是内置在.NET还是一些广泛使用的库中。理想情况下,此类课程将具有以下优势: 无需转换ToUpper()(阅读下一篇文章,了解为什么它不只是实现一个特殊的比较器) 它将使用更少的内存(因为不需要存储与不同值具有相同值的chars)-即对于char的某些

我经常发现自己处理的字符串与其他字符串的比较应该忽略大小写,即Oracle参数。我看到太多的
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