阅读this Eric Lippert的文章后,我了解到C#编译器不喜欢我们留下未初始化的本地变量。由于我时常遇到这个“问题”,我查看了一些旧代码,并且能够清除大部分情况下其实不需要未初始化(
C# 编译器不希望我将
现在这感觉像是一种“hack”,我的问题是:
上面的代码存在设计缺陷吗?
如果存在,当我无法确定引用在运行时是否指向现有对象时,我应该如何处理编译时的引用?
SomeClass obj = null
)本地变量的情况。但是我遇到了一种情况,不知道如何重构代码。public void DoSomething(string foo) {
SomeClass obj; // = null;
try {
obj = SomeClass.CreateItem(target);
} catch(CustomException ex) {
// notify UI of error
}
if (obj != null) {
// do something with `obj`
}
}
SomeClass.CreateItem
可能由于外部因素而失败。如果失败,我想通知用户;如果没有失败,我想执行一个操作。C# 编译器不希望我将
obj
未初始化,所以我通常将其赋值为 null
。现在这感觉像是一种“hack”,我的问题是:
上面的代码存在设计缺陷吗?
如果存在,当我无法确定引用在运行时是否指向现有对象时,我应该如何处理编译时的引用?