如果我有一个主属性字符串,例如:
public String SharedInfo
{
get { return (String)Session["SharedInfo"]; }
set { Session["SharedInfo"] = value; }
}
和内容页面中的标签,我通过执行以下操作检查字符串是否为空: if(Master.SharedInfo == null)
现在我的问题是:为什么if(Master.SharedInfo ==“”)不起作用,因为SharedInfo是一个字符串对吗?
答案 0 :(得分: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)) {
...
}
这也会捕获" "
或"\t"
等字符串。
答案 1 :(得分:1)
在c#中,空字符串""
不为空。它是一个实际的字符串,长度等于零。
您可以使用string.IsNullOrEmpty(string stringToTest)
检查空字符串和空字符串。
答案 2 :(得分:1)
String.Empty
(“”)与null
完全不同
它完全取决于写入Session [“SharedInfo”]的内容。
如果没有,则它将为null,否则为其写入的值,可以是空字符串或null。
确保使用String.IsNullOrEmpty(string @string)