我正在创建一个“通用”库,以作为其他团队成员在各种解决方案项目中用作参考。这些方法通常是 void 没有实际返回数据的功能。

我正在寻找某种为什么在某人中强制使用这些方法的用法 Try...Catch 被别人封锁。我需要确保正确处理错误。我虽然要依靠布尔返回类型,但这也不允许我返回错误消息,所以我唯一的选择是扔一个 Exception.

如果不可能进行适当的强迫,我该如何制作汇编以警告开发人员的尝试/捕获要求时弹出的属性? (有点 Obsolete 属性)。

还有其他更好的方法吗?

编辑:

这是我的完整场景:

我有一个代码方法调用Web服务以远程更新值。更新至关重要。它自我工作正常的方法,但是如果无法到达Web服务,该怎么办?呼叫不返回任何值。

有帮助吗?

解决方案

将某些东西放在 try/catch 块没有使其“正确处理” - 实际上,在 绝大多数 在情况下,正确处理例外的正确方法是让其起泡到一个新的水平。警告: try/finally 更普遍的是要清理资源,但更常见的是 using.

您不能执行“必须正确地使用它”在代码上;这在任何API中都是隐含的,您将引起刺激和烦恼,并迫使人们进入不适当和无助的编码样式,同时给您一个 完全人造和不正确 代码的感觉是正确的。

如果要确保代码正常运行,请进行测试。

您没有可用于此情况的属性。您可能可以创建一个FXCOP规则或类似规则,但出于上述原因:我不建议这样做。

其他提示

我实际上不会这样做,但是作为解决既定问题的有趣解决方案,您可以构建自己的异常类型:SuccessException。然后,您在方法末尾抛出此例外,以表示成功。这使该方法几乎无法使用,而没有某种形式的尝试/捕获。但是,再次: 不要这样做。

您可以返回自定义结果类:

public class Result
{
    public bool Okay { get; set; }
    public string Error { get; set; }
}

然后:

var result = AttemptSomething();

if (!result.Okay)
{
    Console.WriteLine(result.Error);
}

也许返回 string:

var error = AttemptSomething();

if (!String.IsNullOrEmpty(error))
{
    Console.WriteLine(error);
}

或将错误作为输入:

string error;
if (!AttemptSomething(out error))
{
    Console.WriteLine(error);
}

或返回 Exception 扔。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top