gpt4 book ai didi

c# - 如何处理未初始化的局部变量

转载 作者:太空狗 更新时间:2023-10-30 00:14:13 26 4
gpt4 key购买 nike

看完this Eric Lippert 文章,我知道 C# 编译器不喜欢我们让 local 变量未初始化。

当我不时遇到这个“问题”时,我查看了一些我的旧代码并且能够剔除大部分实际上不需要未初始化的情况(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”,我的问题是:

上面的代码是否存在设计缺陷?

如果存在,当我无法确定它们是否会在运行时指向现有对象时,我应该如何在编译时处理引用?

最佳答案

我会像这样重构代码:

private SomeClass TryToCreateItem()
{
try
{
return SomeClass.CreateItem(target);
}
catch(CustomException ex)
{
// notify UI of error
}
return null;
}

public void DoSomething(string foo)
{
SomeClass obj = TryToCreateItem();
if (obj != null) {
// do something with `obj`
}

“提取方法”是我最喜欢的重构。

关于c# - 如何处理未初始化的局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31300761/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com