MediaDescription media;
foreach(var field in fields) {
switch(field.Key) {
case FieldType.Version:
message.Version = Convert.ToInt32(field.Value);
break;
case FieldType.Originator:
message.Originator = OriginatorField.Parse(field.Value);
break;
...
...
case FieldType.Information:
if(media == null) <-- Use of local unassigned variable
message.Description = field.Value;
else media.Description = field.Value;
break;
...
我的意思是,为什么?编译器应该足够智能,以便我预先检查声明,并且只有在else语句中才能访问声明。怎么了?
答案 0 :(得分:1)
未分配且分配null 是局部变量的两种不同状态。在访问局部变量之前,必须使用某些东西初始化局部变量,甚至是null。默认情况下,与类字段不同,它们根本没有初始化。
为了进行比较,此代码不会出现编译错误:
MediaDescription media = null;
...
case FieldType.Information:
if(media == null) <-- Use of local unassigned variable
message.Description = field.Value;
答案 1 :(得分:1)
我认为您误解了编译器的消息:投诉不是您可能正在访问media
对象的属性,而是您正在访问变量本身,该变量根本没有对任何对象的引用 - 甚至没有null
参考。
在C#中,局部变量不是默认初始化的 - 你必须在初次使用之前或之后显式地分配它们;甚至不允许将它们与null
进行比较。