2010-08-30 94 views
0
static class MyClass 
{ 
    static void Main() 
    { 
     bool b1 = false; 
     if (b1) 
     { 
      throw new MyException(GetText(b1)); 
     } 
    } 

    public static string GetText(bool bFlag) 
    { 
     if (bFlag==false) 
     { 
      throw new Exception("'GetText' method should not be called when condition is 'false'); 
     } 
     return "Some error text"; 
    } 
} 

所有工作正常,例如在上面(我的意思是,當條件B1是「真」,那麼「MyException」將適當的文本生成。而當條件如果「假」,則什麼也不會發生如何延遲參數值計算?

我希望有一些輔助的方法對我的異常類:

class MyException : Exception 
{ 
    public void FailIfTrue(bool bCondition, string strErrorMessage) 
    { 
     if (bCondition) 
     { 
      throw new Exception(strErrorMessage); 
     } 
    } 
} 

在這種情況下,「主」的方法將被更改爲另一個問題:

static class MyClass 
{ 
    static void Main() 
    { 
     bool b1 = false; 
     MyException.FailIfTrue(
      b1, 
      GetText(b1) 
      ); 
    } 
} 

在這種情況下「的getText」的方法將被調用......

問題:需要

你看到什麼好的辦法或解決方案,以創建一個幫助,將調用「的getText」只有當它的結果'FailIfTrue'函數的內部?

歡迎任何想法。

謝謝。

回答

2

其實,我看到一個解決方法(不要過一個字符串參數,而是一個Func鍵):如果

public void FailIfTrue(bool bCondition, Func<string> funcErrorMessage) 
{ 
    if (bCondition) 
    { 
     throw new Exception(funcErrorMessage()); 
    } 
} 

但不知道它是最好的什麼是可能在這裏。

請指教!

+0

是的,傳入委託只在某些情況下執行是推遲執行的好方法。 – 2010-08-30 19:10:23