(“”)和(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.Emptynull没有任何值。

不同之处在于""表示空字符串,但null表示它不存在