(“”)和(null)之间有什么区别
在尝试设置Validations时,我最初遇到了一些问题,检查文本框是否为null,我尝试使用
private void btnGo_Click(object sender, EventArgs e) { string name = textLogin.Text; if (name == null) { labelError.Visiblle = true; labelError.Text = "Field Cannot be Left Blank" } }
但它没有用,直到我试了这个
private void btnGo_Click(object sender, EventArgs e) { string name = textLogin.Text; if (name == "") { labelError.Visiblle = true; labelError.Text = "Field Cannot be Left Blank" } }
我的问题是我想知道(“”)和(null)之间的区别以及为什么null不起作用。
提前致谢
与0
和空数组之间的差异相同:一切。 他们的价值观不同。 ""
是一个空字符串,这是一个空白文本框,因为文本是全部。 null
不是值,并且不是空白文本框具有的Text
。
.NET中的System.String
数据类型是一个类 ,一个引用类型。 所以空字符串( ""
或string.Empty
)是对长度为零的值的引用,而null
不引用实际值,因此任何访问它引用的值的尝试都将失败。
例如:
string emptyString = ""; string nullString = null; Console.WriteLine(emptyString.Length); // 0 Console.WriteLine(nullString.Length); // Exception!
我建议您在validation代码中使用IsNullOrEmpty
(或IsNullOrWhiteSpace
)来处理这两种情况:
if (string.IsNullOrEmpty(name)) { labelError.Visiblle = true; labelError.Text = "Field Cannot be Left Blank" }
""
是一个空字符串vs null
,表示“不存在”。
在您的情况下,您首先将name
与“不存在”进行比较,这是错误的,因为name
确实存在。 然后将name
与空字符串进行比较,这是真的,因为它具有空字符串的值。
TextBox.Text
的默认值是String.Empty
或""
not null。 所以你的第一个代码不起作用。 null
只是表示一个对象没有指向任何东西,它没有分配任何内存。
null
只表示对象(在本例中为textLogin.Text
对象)不存在。 为了这种情况,textLogin对象不能存在。 因此,在这种情况下, textLogin
对象不为null,因此textLogin.Text
不能为null。
""
另一方面意味着一个空字符串,这意味着文本框的文本中没有任何内容。 即textLogin.Text
中不包含任何字符。
在外行人的术语中, null
表示缺少值, ""
表示零长度字符串,这不是一回事。 可能有一些软件可以处理null
字符串和""
例如Console.WriteLine
,但它仍然不能使它们成为同一个东西。
严格来说, "" == null
表达式在设计上是false
的。 .NET框架中String
类型的相等比较通过==
运算符重载来实现 ,它不会将null
视为等于""
。
您可以使用IsNullOrWhiteSpace
进行文本框输入validation。 它检查null,空字符串或空格(制表符,空格等)。 http://msdn.microsoft.com/en-us/library/system.string.isnullorwhitespace.aspx
简单, ""
有一个有效值,即String.Empty
但null
没有任何值。
不同之处在于""
表示空字符串,但null
表示它不存在