string确实是引用类型,因此若只声明而不赋值,它是不能为外界引用的,原因就在于类未被实例化为对象。
而int、boolean等是值类型,如果未被赋值,就不能被使用,如果直接使用,那C#编译器是会报错的。除非你把int、boolean作为某个类的成员变量,如果只声明却不赋值,那么在类实例化时,编译器会把这些值类型的成员自动变量赋一个初始值,例如int赋为0,boolean赋为false,这样可以直接在类中或外部被调用。
如果这些值类型只是类中某个方法中的局部变量(即值类型在方法体中声明).那么编译器就会报错,这时反而不需要检测数据了,因为程序根本无法通过。
可能高手还有更好的判断方法吧,关注之……
值类型一般都有初始值 比如说Int32的初始值为0 boolean的初始值为false
但如果以初始值来判定一个值类型是否被赋值显然是不好的,因为0也是一个有效的Int32类型,false也是一个有效的boolean类型
所以说只有用int? double?这种让值类型可为null的方法来判断是否赋值,而boolean不适合这种判断 因为它只有两个值
也可以把一个Int32类型赋初始值为int.MinValue 判断的时候用if(i == int.MinValue)来进行判断
我是这样的,给这些值类型加一个默认值.这种默认值一般情况下达不到.
int i = int.MinValue;
这样,只要是i == int.MinValue,我就认为是默认值.同理,decimal,double,DateTime都有MinValue,Guid.Empty
为什么要判断它有没有被赋值呢?
如果只是使用这个变量的值的话,那么判断有没有被赋值过是没有意义的。
是想看这个变量有没有被更改过么?
如果是的话那么应该设置一个标志位,比如bool XXXIsChanged。
当这个变量被更改的时候,就把XXXIsChanged 设为true。
当然,判断的方法有很多,其实我想说的是:
达到目的的路有很多条,但有些是不易读的,也就是不好的代码风格。
int i;可以写成全局类型
如果没赋值的话,它会默认i=0