【发布时间】: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
当我声明时
string x = new string(new char[0]);
它工作正常。我的问题是什么值将分配给 x ?
当我检查时
Console.WriteLine(x.CompareTo(null)==0);,it returns false.
【问题讨论】:
标签: c# string variable-assignment
x 将是一个空字符串,与x = "" 相同。
null 和 "" 是两个不同的字符串值。特别是,null 是一个空引用,因此您不能在其上调用任何实例成员。因此,如果x 为空,x.Length 将抛出一个NullReferenceException。
相比之下,""(或String.Empty)是一个恰好包含 0 个字符的普通字符串。它的实例成员可以正常工作,"".Length 等于 0。
要检查字符串是否为null 或空,请调用(惊喜)String.IsNullOrEmpty。
【讨论】:
字符串不为空,为空。
Console.WriteLine(x.CompareTo(String.Empty)==0);
【讨论】:
当您分配新的 char[0] 时,您的字符串不为空。是空的。
你可以这样做:
Console.WriteLine(string.IsNullOrEmpty(x));
【讨论】:
您在这里选择了一个有趣的案例,因为在 .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 可以返回对现有对象的引用的情况。
【讨论】:
试试这个:
Console.WriteLine(x.CompareTo(string.Empty) == 0);
【讨论】: