本文介绍了正在使用&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;坏做法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!