AZ.*_*AZ. 6 c# exception return-value
我有一个方法 Foo() 做了一些艰苦的工作,在 UI 层我有一个按钮来调用该方法。
我想要做的就是调用该方法并在 Foo() 方法出现问题时显示一个消息框。
我有两种选择来设计方法签名:
1.元组
Tuple<bool, string> Foo()
{
if(!DoHardWorkA()) return Tuple.New(false, "cannot do hardwork A");
if(!DoHardWorkB()) return Tuple.New(false, "cannot do hardwork B");
return Tuple.New(true, String.Empty);
}
Run Code Online (Sandbox Code Playgroud)
2.异常
void Foo()
{
if(!DoHardWorkA()) throw new ProgramSpecificException("cannot do hardwork A");
if(!DoHardWorkB()) throw new ProgramSpecificException("cannot do hardwork B");
return Tuple.New(true, String.Empty);
}
Run Code Online (Sandbox Code Playgroud)
DoHardWorkA() 和 DoHardWorkB() 都是我无法控制的外部方法,它们返回 true/false 指示结果。
从逻辑上讲,我认为我应该选择选项 2,因为它们确实是例外;但为了一致性,我想选择选项 1。
你更喜欢哪一个,为什么?
抛出异常并以一致的方式处理它会更好。
如果 Foo 由于任何其他原因失败,那么它也会被处理。假设一个场景。
void UIMethod()
{
Tuple<Result, Error> ret = Foo();
if(ret.Error)
MessageBox.Show(ret.Error);
}
Run Code Online (Sandbox Code Playgroud)
现在,由于需求发生变化,您必须在 Foo 之前调用另一个方法,它也可能引发异常。然后事情就变得复杂了。
这样做要容易得多。
void UIMethod()
{
try{
MethodBeforeFoo();
var ret = Foo();
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3531 次 |
| 最近记录: |