问题来自于对控件的Text属性理解错误。
一:null和空的区别
1.声明的string类型的变量和属性以及字段在未赋值的情况下均为null,这个null不仅仅表示为无字符,更表示为空的引用。
比如:string userName;此时判断userName是否为空应该是if(userName==null)而不是if(userName==“”),并且使用userName.Equals(null)或userName.Equals(“”)均为错的,因为此时userName是个空引用,根本无法调用Equals()方法。但是如果声明为string userName=“”,则上述方法均成立。但是此时userName并不是null而是空值。
2.所有控件的Text属性的在未赋值的情况下是空值(""), 而不是null。
二:==和Equals()的区别
在此之前先说说内存的分类(从编程角度来说)
1)静态内存:存放静态变量,在整个程序运行期一直存在,空间中的值可以改变,但不用另辟空间(针对一个变量指向的静态空间)。类中的静态成员只能通过类名来访问,而不能通过对象和this来访问。非静态的可以访问静态的,但静态的不能访问非静态的,只能访问静态的。
2)寄存器:暂时未理解。
3)堆内存:实例(即使用new关键字创建的实例)
4)栈内存:局部变量、临时变量、值类型变量,地址(引用:4个字节)
值类型的变量放在堆中,而引用放在栈中,期实例放在堆中。==是进行值比教,而Equals()是进行引用比较。
例子:
例子1:
string user1 = "tiger";
string user2 = "tiger";
Console.WriteLine((user1==user2));//打印true
Console.WriteLine((user1.Equals(user2)));//打印true
例子2:
string[] user1 ={"user1","user2"};
string[] user2={"user1","user2"};
Console.WriteLine((user1==user2));//false
Console.WriteLine((user1.Equals(user2)));//false