gpt4 book ai didi

c# - 正在使用 "out"错误做法

转载 作者:太空狗 更新时间:2023-10-29 18:07:49 26 4
gpt4 key购买 nike

我刚刚将 out bool 参数添加到我编写的方法中,以便在我的 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 参数是不好的做法吗?如果是这样,我该怎么办?

最佳答案

在 void 方法中使用 out 参数通常不是一个好主意。你说你已经使用了它“而不是让方法本身返回 false/true,因为这意味着 DoSomething 失败/成功”——我不相信暗示存在。通常在 .NET 中失败是通过异常而不是 true/false 指示的。

out 参数通常比返回值更难用 - 特别是,你必须有一个正确类型的变量来处理,所以你不能只写:

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

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

public enum WarningLevel
{
NoWarningRequired,
WarnUser
}

然后该方法可以返回一个 WarningLevel 而不是 bool。这将使您的意思更清楚-尽管您可能想稍微重命名一些东西。 (很难用诸如“DoSomething”之类的元句法名称给出建议,尽管我完全理解你为什么在这里使用它。)

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

关于c# - 正在使用 "out"错误做法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4255188/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com