我正在开发一个.NET项目,团队决定回避Exceptions的惯例,转而使用自定义错误信号。在实践中,这个概念运作得很好,除了有一个令人讨厌的副作用:我发现自己在决定是否继续之前不断检查中间错误代码:
var error = DoSomething();
if( !error.Success )
return error;
return DoSomethingElse();
我想做的事情如下:
DoSomething().ReturnIfError();
return DoSomethingElse();
我知道一些语言如Ruby支持'return if'构造 - 在C#中有没有这样的东西,或者在扩展方法中是否可以这样做?
答案 0 :(得分:0)
这不是可以通过扩展方法巧妙地入侵的东西。
在你给出的第二个例子中(用理论方法链接),你会......
DoSomething
DoSomething
出错,请致电ReturnIfError
DoSomethingElse
您需要使用return
关键字尽早摆脱方法块。
假设这是你真正想做的事情,那么以下代码可以实现这一点(不是我推荐它!)。
using System;
namespace ConsoleApplication6
{
public static class ClassUtility
{
public static void CallOnError<TIn>(this TIn value, Func<TIn, bool> fn, Action<TIn> errorFn)
where TIn : class
{
if (!fn(value))
{
errorFn(value);
}
}
}
public class TestClass
{
public bool FirstCall(bool value)
{
Console.WriteLine("First call.");
return value;
}
public void SecondCall()
{
Console.WriteLine("Second call.");
}
public void ThirdCall()
{
Console.WriteLine("Third call.");
}
}
class Program
{
static void Main(string[] args)
{
var testClass = new TestClass();
testClass.CallOnError(tc => tc.FirstCall(false),
tc2 => tc2.SecondCall());
testClass.CallOnError(tc => tc.FirstCall(true),
tc2 => tc2.SecondCall());
testClass.ThirdCall();
Console.ReadLine();
}
}
}
答案 1 :(得分:-1)
执行一个通用类来检查错误并在整个代码中调用该类或静态方法。