3

我正在寻找从函数或方法返回的类型,首先传达它是否成功,然后将消息(作为字符串)附加到它以传递有关失败原因的更多信息。它可能是应用程序退出代码行中的内容;但是,我不会创建一整套退出代码来索引特定的错误消息。我确实喜欢单个“成功”退出代码的想法,因此可以快速检查调用是否失败并相应地工作。

我想让它成为一系列静态方法(如服务调用)的返回类型,我可以为此创建一个包含这两个字段(bool 和 string)的类;但是,我觉得可能已经存在类似的东西,尽管我一直没能找到它。此外,如果有更好的做法来处理从方法返回以获取此类信息,或者完全针对此类静态类的一般规则,我欢迎您提出意见。

为了更好的可视化:

    public static <type> CreateSomething(string somethingName)
    {
        ...
        return new <type>("Fail!", "Because...");
    }
4

5 回答 5

5

有两种明显的方法:定义自己的类型或使用Tuple<T1, T2>.

我认为你应该几乎总是只定义你自己的类型。它不花钱。去做就对了。这就是你应该这样做的方式。

如果你觉得特别懒惰...

public Tuple<bool, string> MyMethod(...)
{
    ...
    return Tuple.Create(false, "Something broke");
}
于 2012-03-21T19:26:16.207 回答
3

您可以遵循 .NET 框架中的 TryDoSomething 模式,而不是创建新类型。

例如:

int number;
if(Int32.TryParse(value, out number))
{
   Console.WriteLine(number);
}

您可以创建一个返回布尔值以表示成功或失败的方法。它还可以返回错误消息的参数。

于 2012-03-21T19:25:13.173 回答
2

你所说的叫做泛型。这是Microsoft 对泛型的介绍,网上也有很多关于它们的介绍。

对于您的问题,您还可以将泛型与TryCan 模式结合起来。然而,很多时候你只想冒泡一个异常,所以要好好考虑一下

于 2012-03-21T19:20:05.647 回答
1

这是一个例外。

您的函数不应为成功返回真/假。它应该是一个 void,如果失败则抛出异常。

...并且不要忘记将异常放在方法的 XML 注释中。

于 2012-03-21T19:21:31.447 回答
0

.net 的核心程序集不包含这种类型。您可以Option<T>在 F# 运行时中找到。

我还在 SO 上的一个较早的问题中发布了这种类型:通用属性缺点?

于 2012-03-21T19:23:35.880 回答