为什么NULL字符串不同于“”字符串?

时间:2011-11-02 20:10:32

标签: .net string c++-cli

以下编码方式有什么区别:

if (String::IsNullOrEmpty(TextBox1->Text)) 

if (TextBox1->Text == "") 

8 个答案:

答案 0 :(得分:9)

第一个也检查null

TextBox-> Text属性永远不会为null,但请考虑(C#):

string s1 = null;
string s2 = "";

string.IsNullOrEmpty(s1)    // true
string.IsNullOrEmpty(s2)    // true

s1 == ""    // false
s2 == ""    // true

IsNullOrEmpty()函数只是一次检查2(错误)条件的便利帮助。

所以你的标题略有偏差,这是空的和空的。这是因为:

string.Empty == ""     // true

字符串是一个对象。 s1s2不是字符串,而是字符串的引用(指针)。 null是一个特殊的引用值,意思是“不指向对象”。空字符串是长度为0

的有效字符串对象

答案 1 :(得分:2)

主要区别在于String :: IsNullOrEmpty()还测试字符串变量为null。 例如,这两种方法都将返回true:

public bool TestString(string theString){
  return String::IsNullOrEmpty(theString);
}

string emptyString; //currently a null object
TestString(emptyString); //returns true
emptyString = "";
TestString(emptyString); //also returns true

答案 2 :(得分:1)

TextBox1->Text=""是作业。你打算写TextBox1->Text==""

String::IsNullOrEmpty()null或空字符串测试为true,如其名称所示。碰巧的是,对于您的示例,TextBox1->Text永远不会评估为null

答案 3 :(得分:1)

如果字符串为IsNullorEmpty

null将返回true。除此之外,它们完全一样。

答案 4 :(得分:1)

第二个语句是赋值,而不是相等运算符。

看起来你混淆了===(顺便说一下,C ++中唯一最突出的错误来源)。

托马斯

答案 5 :(得分:1)

第一个检查以下任何一个:

string x = null //x is null, unassigned
string x = "" //x is a string, but with nothing in it.

第二只检查是否

x == ""

答案 6 :(得分:1)

如果字符串为null,则第一个语句返回true;如果字符串为空,则返回第二个语句,因此,第一个语句可以转换为:

if(TextBox1->Text == null ) || TextBox1->Text == "") 

答案 7 :(得分:1)

第一行“if(IsNullOrEmpty(TextBox1-> Text))”可以这样写:

if (TextBox1->Text== null || TextBox1->Text == "")

第二个陈述是一个分配(而不是比较)你正在做“x =值”; 但是如果你输错了,那就意味着你没有测试null(与第一个语句相比。