当您抛出异常时,您可以放入一个方便的消息,以提供有关操作失败原因的更多信息。
显然,对通常会死的方法抛出异常并不是一种好的做法。
This article on MSDN建议使用TryParse
模式和Tester-Doer
模式,但这两种模式都不允许您提取任何有关原因方法失败的信息
是否有一种可接受的模式可以传递出一种安全失败的方法,该方法可以让您收集更多失败原因的数据?
显然,您可以执行类似public FailureReason TryParseWithMessage(string s, out MyClass myClass)
或public bool TryParseWithMessage(string s, out MyCLass myClass, out FailureReason failureReason)
的操作,但对于方法成功的正常情况,这些似乎有点脏......
答案 0 :(得分:2)
我的建议是返回Tuple<StatusMessage, MyClass>
。那你就做了
var result = ParseWithStatus(data);
if (result.Item1 == StatusMessage.Success) return result.Item2;
else
{
// handle each StatusMessage case that is a failure.
}
或者某些内容(例如switch
而不是if/else
)。
答案 1 :(得分:2)
您可以使用特殊类来封装结果,无论是成功案例还是失败案例。它的界面可能如下所示:
public interface IParseResult {
// whether the operation succeeded
bool Success { get; }
// contains error messages, can also be a single string message
IEnumerable<string> Messages { get; }
// the result of the operation in case of success, null otherwise
MyClass MyClass { get; }
}
然后你的方法可以返回它:
IParseResult Parse(string s) ...