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語句中才能訪問聲明。怎麼了?使用本地未賦值的變量 - 甚至與其他語句
「編譯器應該足夠聰明」往往是一個被誤導的說法。編譯器知道一些事情,它不知道其他事情。事實是,爲它編寫一種語言和一個編譯器是很難的。在寫一篇文章時,設計師通常不會問「我們爲什麼不做X?」而是問「爲什麼我們應該*做X,是否有一個令人信服的理由,因爲它會有多難?」他們爲什麼不添加這個功能可能有很多原因,他們爲什麼要添加這個功能的原因很少。最簡單的是,如果將該變量聲明爲「MediaDescription media = null;',該錯誤是否會持續存在? – David
可能的複製 - http://stackoverflow.com/q/9233000/1324033 – Sayse