2011-11-02 84 views
0

是什么下面的编码方式之间的区别:为什么NULL字符串与“”字符串不同?

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

if (TextBox1->Text == "") 

+1

BTW,为什么用'C#'标签? – sll

+0

编辑标记问题完全改变了你的问题。它会只有公平然后才能说清楚。 –

+0

这是C++ - CLI的问题..而不是C# – Nayan

回答

9

第一个也检查null以及。

一个TextBox-> Text属性永远不会为空,但考虑(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的有效字符串对象。

+0

'NULL'并不意味着空?'NULL'和空的区别是什么到底是什么? – Aan

+3

Adban,一个字符串是一个对象,'s1'和's2'不是字符串,而是字符串的引用(指针),'null'是一个特殊的引用值,意思是'not pointing to a object'。一个有效的字符串对象,长度= 0 –

1

TextBox1->Text=""是赋值。你的意思是写TextBox1->Text==""

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

+0

Downvote大概是因为关于'='和'=='的注释吗?问题已编辑! –

+0

问题编辑似乎也是由第三方:( –

1

IsNullorEmpty如果字符串为null,则返回true。除此之外,它们完全一样。

1

第二个陈述是一个赋值,而不是一个相等运算符。

看起来像你困惑===(btw。在C++中最突出的错误来源)。

托马斯

2

的主要区别是,字符串:: IsNullOrEmpty()也测试为空字符串变量。对于任一

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 
1

第一个检查: 例如,这两种方法都将返回true

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

第二只检查是否

x == "" 
1

第一条语句如果字符串为空或者为空,则返回true;仅当字符串为空时返回第二个语句,第一个语句可以翻译为:

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

)编辑时不要更改问题的含义! –

1

第一行:“如果(IsNullOrEmpty(TextBox1->文本))”可以这样写:

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

第二条语句是赋值(而不是比较)你正在做的“x =价值”; 但是,如果你做了一个错字,这意味着你没有对空测试(与第一个语句。

相关问题