string s1;
string s2 = null;
if (s1 == null) // compile error
if (s2 == null) // ok
Run Code Online (Sandbox Code Playgroud)
我真的不明白为什么需要明确的赋值.什么是null变量和未赋值变量之间的区别?我总是假设运算符/编译器无论如何都将未分配的变量简单地赋值为null.如果它们不是空的,那么它们是什么?
Mar*_*ers 73
未分配的成员会自动初始化为其默认值(在这种情况下为空引用string).
未分配的局部变量未分配任何值,并且尝试访问可能未分配的变量将产生编译错误.
Tse*_*eng 12
需要显式赋值的原因非常简单.当人们尝试使用未分配/未初始化的变量时,这通常是错误的来源.
通过强制开发人员执行此操作,可以消除开发人员忘记初始化变量时发生的错误.通过初始化它,你可以控制它.
这真是件好事!我不知道我在一些脚本语言中经常使用未初始化或未定义的变量,这花了很长时间才找到^^
如果你有一个未分配的本地值,你很可能做一些愚蠢的事情.更糟糕的是,你正在做那种聪明的人在当下的热情中可以做的那种愚蠢的事情(每个人每天做一些愚蠢的事情).
与某些导致警告的事物不同,在特殊情况下使用未分配的值没有任何可能的优势.
允许未分配的本地或假定特定值之间的唯一成本差异是几次击键(通常= null;最多可能是= default(SomeType);
禁止这样的结构对于专业人士来说很重要而且缺乏利弊.没有技术上的理由说明为什么语言不能被设计为允许未分配的当地人,但禁止的好处超过了缺点.