我刚刚添加了一个outbool 参数到我编写的方法中,以便在我的 UI 中收到警告。我使用了 out 而不是让方法本身返回 false/true,因为这意味着做一点事失败/成功。我的想法是warnUser将指示警告实际上是什么,而无需查看该方法的实现。
原始代码
public void DoSomething(int id, string input);
New Code
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参数不好的做法,如果是这样我该怎么办?
在 void 方法中使用 out 参数通常是一个坏主意。你说你已经使用它“而不是让方法本身返回 false/true,因为这意味着 DoSomething 失败/成功” - 我不相信存在这种暗示。通常在 .NET 中,失败是通过异常而不是真/假来指示的。
out
参数通常比返回值使用起来更难看 - 特别是,你必须有一个正确类型的变量来处理,所以你不能只写:
if (DoSomething(...))
{
// Warn user here
}
您可能需要考虑的一种替代方案是指示所需警告级别的枚举。例如:
public enum WarningLevel
{
NoWarningRequired,
WarnUser
}
然后该方法可以返回一个WarningLevel
代替bool
。这会让你的意思更清楚——尽管你可能想稍微重命名一些东西。 (很难用诸如“DoSomething”之类的元语法名称提供建议,尽管我完全理解你为什么在这里使用它。)
当然,另一种选择是您可能希望显示更多信息 - 例如reason为了警告。这可以通过枚举来完成,或者您可能想完全给出一些更丰富的结果。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)