2012-02-08 14 views
2

我正在开发一个.NET项目,其中团队决定避开例外惯例以支持自定义错误信号。在实践中,这一概念的作品不够好,但有一个讨厌的副作用:我发现自己决定是否继续之前不断地检查中间错误代码:有自定义错误信号的条件行为

var error = DoSomething(); 

if(!error.Success) 
    return error; 

return DoSomethingElse(); 

我想什么做的是类似如下:

DoSomething().ReturnIfError(); 
return DoSomethingElse(); 

我知道有一些语言,比如Ruby支持“回归,如果”结构 - 有没有在C#中的任何这样的事情,还是有可能在一个扩展方法来做到这一点?

+0

你说回()的方法来运行或方法名..?..因为你的情况VAR误差将返回true或false ..如果我正确地读这个..你想返回运行..的方法? – MethodMan 2012-02-08 20:55:57

+0

如果你想返回自己的方法名,例如..看看这个链接,它将能够希望给你一个想法,该怎么做,以及如何做到这一点..假设我正确理解你的问题。 。http://bytes.com/topic/c-sharp/answers/233553-get-function-name – MethodMan 2012-02-08 20:59:03

+0

这个例子是相当人为的......重点是我想继续执行,而不仅仅是执行一个方法,如果一个错误未被检测到。 – 2012-02-08 21:03:51

回答

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(); 
     } 
    } 
} 
+0

我很害怕这种情况。感谢您的输入。 – 2012-02-09 13:27:38

-1

做一个通用类,检查错误并在整个代码中调用该类或静态方法。