2012-02-08 7 views
2

私は、チームがカスタムエラー信号を優先して例外条項を回避することを決めた.NETプロジェクトに取り組んでいます。 1件の厄介な副作用がある以外実際には、概念が、十分に機能します。私がやりたい何カスタムエラー信号による条件付き動作

var error = DoSomething(); 

if(!error.Success) 
    return error; 

return DoSomethingElse(); 

は、次のようなものです:私は自分自身常に続行するかどうかを決定する前に、中間のエラーコードをチェック見つけますC#でどのようなことがある、または拡張メソッドで行うことが可能であろう - ?私は、構築物は「あればリターン」は、Rubyなどの一部の言語がサポートして知っている

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

+0

あなたはあなたのケースのvarエラーがtrueまたはfalseを返すため、MethodName ..?..を返すと言っていますか?私がこれを正しく読んでいる場合は、実行する方法..? – MethodMan

+0

もしあなたが自分自身のMethodNameを返そうとしているのなら、このリンクをチェックしてください。あなたの質問を正しく理解していることを前提として、何をやるべきか、アイデアを教えてくれるでしょう。 http://bytes.com/topic/c-sharp/answers/233553-get-function-name – MethodMan

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

私はそれが事実であることを恐れていました。あなたのご意見ありがとうございます。 –

-1

エラーをチェックし、コード全体でそのクラスまたは静的メソッドを呼び出すユニバーサルクラスを1つ実行します。

関連する問題