本文介绍了正在使用&OUT;OUT&QOOT;坏做法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我刚刚将out布尔参数添加到我编写的方法中,以便在我的UI中收到警告。我使用了Out,而不是让方法本身返回FALSE/TRUE,因为这意味着DoSomething失败/成功。我的想法是,warnUser将指示警告的实际内容,而不必查看方法的实现。

原始代码

public void DoSomething(int id, string input);

新代码

public void DoSomething(int id, string input, out bool warnUser);

我正在使用Moq测试此代码,但它不支持out/ref参数,因为Lambda表达式不支持它们

测试代码

mockService.Verify(It.IsAny<int>(), It.IsAny<string>(), It.IsAny<bool>());

那么,使用Out参数是不好的做法吗?如果是,我应该怎么做?

推荐答案

在空方法中使用Out参数通常不是一个好主意。你说你已经使用了它,而不是让方法本身返回FALSE/TRUE,因为这会暗示DoSomething失败/成功--我不相信这一含义。在.NET中,故障通常通过异常而不是True/False来指示。

out参数通常比返回值更难看--尤其是必须有正确类型的变量来处理,所以不能只写:

if (DoSomething(...))
{
   // Warn user here
}

您可能需要考虑的一种替代方法是使用枚举来指示所需的警告级别。例如:

public enum WarningLevel
{
    NoWarningRequired,
    WarnUser
}

则该方法可以返回WarningLevel而不是bool。这会让你的意思更清楚--尽管你可能想稍微重命名一些东西。(对于像"DoSomething"这样的元语法名称,我很难给出建议,尽管我完全理解您为什么要在这里使用它。)

当然,另一种选择是您可能希望显示更多信息--例如警告的原因。这可以使用枚举来完成,或者您可能希望完全提供一些更丰富的结果。

这篇关于正在使用&OUT;OUT&QOOT;坏做法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-20 00:15