我想到了两种可能性:
- 使用TryXXX模式(在一些BCL方法中使用,如DateTime.TryParse)。
- 设计一个包含操作状态和结果的类,然后让您的方法返回此类。
让我们首先看看TryXXX模式。它基本上是一个返回布尔值和结果作为out
参数的方法。
public bool TryXXX(string someInput, out string someResult, out string errorMessage)
{
...
}
这将会被使用成这样:
string someResult;
string errorMessage;
if (!TryXXX("some parameter", out someResult, out errorMessage))
{
}
else
{
}
在第二种方法中,您只需设计一个包含所有必要信息的类:
public class MyResult
{
public bool Success { get; set; }
public string ErrorMessage { get; set; }
public string SomeResult { get; set; }
}
然后让你的方法返回这个类:
public MyResult MyMethod(string someParameter)
{
...
}
这将会像这样被使用:
MyResult result = MyMethod("someParameter");
if (!result.Success)
{
// an error occurred => use result.ErrorMessage to get more details
}
else
{
// everything went fine => use the result.SomeResult here
}
当然,结果可以是任何复杂对象,而不仅仅是字符串(如本例所示)。