C# 中如何判断变量是否被赋值
String,DateTime,Guid等看似值类型,但其实它们都是的继承自Object的类,未赋值前可判断为null举个例子:stringstr;if(str==nul...
String, DateTime, Guid 等看似值类型,但其实它们都是的继承自 Object 的类,未赋值前可判断为 null
举个例子:
string str;
if (str == null) Console.Write('变量没有赋值');
但 Int32, Boolean 等类型的,未赋值前如何判断其是否有值?
我现在用 int? 使其可以拥有 null,但其类型实际上是 Nullable<int>,显然不是最好的解决方案。
例子:
int? i;
if (i == null) Console.Write('变量没有赋值');
以下是希望各位大虾指教我如何构想例子,例子当然是错的,只是通过它希望能表达我想表达的意思:
int i;
if (i == ???) Console.Write('变量没有赋值'); //这个判断语句该如何写?如何判断 i 并没有被赋值? 展开
举个例子:
string str;
if (str == null) Console.Write('变量没有赋值');
但 Int32, Boolean 等类型的,未赋值前如何判断其是否有值?
我现在用 int? 使其可以拥有 null,但其类型实际上是 Nullable<int>,显然不是最好的解决方案。
例子:
int? i;
if (i == null) Console.Write('变量没有赋值');
以下是希望各位大虾指教我如何构想例子,例子当然是错的,只是通过它希望能表达我想表达的意思:
int i;
if (i == ???) Console.Write('变量没有赋值'); //这个判断语句该如何写?如何判断 i 并没有被赋值? 展开
12个回答
展开全部
string确实是引用类型,因此若只声明而不赋值,它是不能为外界引用的,原因就在于类未被实例化为对象。
而int、boolean等是值类型,如果未被赋值,就不能被使用,如果直接使用,那C#编译器是会报错的。除非你把int、boolean作为某个类的成员变量,如果只声明却不赋值,那么在类实例化时,编译器会把这些值类型的成员自动变量赋一个初始值,例如int赋为0,boolean赋为false,这样可以直接在类中或外部被调用。
如果这些值类型只是类中某个方法中的局部变量(即值类型在方法体中声明).那么编译器就会报错,这时反而不需要检测数据了,因为程序根本无法通过。
可能高手还有更好的判断方法吧,关注之……
而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)来进行判断
但如果以初始值来判定一个值类型是否被赋值显然是不好的,因为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
int i = int.MinValue;
这样,只要是i == int.MinValue,我就认为是默认值.同理,decimal,double,DateTime都有MinValue,Guid.Empty
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
为什么要判断它有没有被赋值呢?
如果只是使用这个变量的值的话,那么判断有没有被赋值过是没有意义的。
是想看这个变量有没有被更改过么?
如果是的话那么应该设置一个标志位,比如bool XXXIsChanged。
当这个变量被更改的时候,就把XXXIsChanged 设为true。
当然,判断的方法有很多,其实我想说的是:
达到目的的路有很多条,但有些是不易读的,也就是不好的代码风格。
如果只是使用这个变量的值的话,那么判断有没有被赋值过是没有意义的。
是想看这个变量有没有被更改过么?
如果是的话那么应该设置一个标志位,比如bool XXXIsChanged。
当这个变量被更改的时候,就把XXXIsChanged 设为true。
当然,判断的方法有很多,其实我想说的是:
达到目的的路有很多条,但有些是不易读的,也就是不好的代码风格。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
int i;可以写成全局类型
如果没赋值的话,它会默认i=0
如果没赋值的话,它会默认i=0
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询