0

如果我有一个主属性字符串,例如:

public String SharedInfo
{
    get { return (String)Session["SharedInfo"]; }
    set { Session["SharedInfo"] = value; }
}

和内容页面中的标签,我通过执行以下操作检查字符串是否为空: if(Master.SharedInfo == null)

现在我的问题是:为什么 if(Master.SharedInfo == "") 不起作用,因为 SharedInfo 是一个字符串,对吗?

4

3 回答 3

2

有一种方便的方法可以“抓住”两者

if (String.IsNullOrEmpty(Master.SharedInfo)) {
    ...
}

null并且""不相等。null意味着根本没有字符串。""是一个长度的字符串0

string s = null;
int i = s.Length; // <-- Throws null reference exception

string s = "";
int i = s.Length; // OK, i => 0

""并且String.Empty是等价的。有些人说您应该始终使用String.Empty而不是"",但这并没有什么区别。


更新

相等的字符串常量由编译器保留,即编译器只存储相等的常量一次。你可以做一个简单的测试(回应@BobTodd的评论),

string s = ""; 
Console.WriteLine(Object.ReferenceEquals(s, "")); // --> true
Console.WriteLine(Object.ReferenceEquals(s, String.Empty)); // --> true

为了完整起见(根据@JoelEtherton 的评论)。从 .NET Framework 4.0 开始,您可以测试

if (String.IsNullOrWhitespace(Master.SharedInfo)) {
    ...
}

这将捕获类似" "or"\t"的字符串。

于 2012-05-30T13:40:12.820 回答
1

在 C# 中,空字符串""不为空。这是一个实际的字符串,长度为零。

您可以使用string.IsNullOrEmpty(string stringToTest)检查空字符串和空字符串。

于 2012-05-30T13:38:58.970 回答
1

String.Empty("") 和null完全不同

这完全取决于写入 Session["SharedInfo"] 的内容。

如果什么都没有,那么它将为 null,否则为写入的值,可以是空字符串或 null。

确保使用String.IsNullOrEmpty(string @string)

于 2012-05-30T13:39:48.163 回答