【问题标题】:String Assignment -Clarification字符串赋值 - 说明
【发布时间】:2010-12-11 05:21:46
【问题描述】:

当我声明时

string x = new string(new char[0]);

它工作正常。我的问题是什么值将分配给 x ?

当我检查时

Console.WriteLine(x.CompareTo(null)==0);,it returns false.

【问题讨论】:

    标签: c# string variable-assignment


    【解决方案1】:

    x 将是一个空字符串,与x = "" 相同。

    null"" 是两个不同的字符串值。特别是,null 是一个空引用,因此您不能在其上调用任何实例成员。因此,如果x 为空,x.Length 将抛出一个NullReferenceException

    相比之下,""(或String.Empty)是一个恰好包含 0 个字符的普通字符串。它的实例成员可以正常工作,"".Length 等于 0。

    要检查字符串是否为null 或空,请调用(惊喜)String.IsNullOrEmpty

    【讨论】:

      【解决方案2】:

      字符串不为空,为空。

      Console.WriteLine(x.CompareTo(String.Empty)==0);
      

      【讨论】:

        【解决方案3】:

        当您分配新的 char[0] 时,您的字符串不为空。是空的。

        你可以这样做:

        Console.WriteLine(string.IsNullOrEmpty(x));
        

        【讨论】:

          【解决方案4】:

          您在这里选择了一个有趣的案例,因为在 .NET 上它违反了最小意外原则。每次执行

          string x = new string(new char[0]);
          

          您将获得对 same 字符串的引用。

          (编辑:要非常清楚这一点 - 它是一个非空引用。它引用一个字符串,就像使用任何其他形式的构造函数或使用字符串文字一样。)

          我确定它使用来指代与“”不同的字符串,但现在它似乎是同一个:

          using System;
          
          public class Test
          {
              static void Main()
              {
                  object x = new string(new char[0]);
                  object y = new string(new char[0]);
                  object z = "";
                  Console.WriteLine(x == y); // True
                  Console.WriteLine(x == z); // True
              }
          }
          

          据我所知,这是唯一为类调用new 可以返回对现有对象的引用的情况。

          【讨论】:

          • 虽然这是一个有趣的观点,但与问题无关。
          • @Slaks:我不明白这与问题无关。特别是,它是对字符串的引用,因此它是非空的。我认为您每次都获得相同的参考这一事实完全与问题相关。
          • 这是否相当于说上面实例化的两个字符串将具有相同的地址?
          • @Skeet:我的意思是它无助于回答问题。
          • @SLaks:以什么方式?问题是“将为 x 分配什么值”,答案是“对字符串的引用 - 每次执行该行时都相同(非空)引用”。这怎么不能回答问题?
          【解决方案5】:

          试试这个:

          Console.WriteLine(x.CompareTo(string.Empty) == 0);
          

          【讨论】:

            猜你喜欢
            • 2020-04-09
            • 2022-11-14
            • 2013-06-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-05-12
            • 2011-01-07
            相关资源
            最近更新 更多