2011-01-21 15 views
0

我是.Net開發新手,我正在尋找一些建議。C#和.NET語言:替換使用C宏

我有一些代碼會拋出一些異常。例如,如果我的數據庫關閉,則會引發這些異常。如果失敗,我想讓用戶有能力重試執行的代碼。

這裏我最初的代碼:

executeRequest(); 

我在C風格鑫卡特什麼(但在C#反正工作):

do 
{ 
    try 
    { 
     executeRequest(); 
     return; 
    } 
    catch (Exception exception) 
    { 
     ErrorMessagesUtils.ShowTaskErrorMessage(exception); 
    } 
} while (MessageBox.Show("Failed : Retry ?", "Error", 
         MessageBoxButtons.YesNo, 
         MessageBoxIcon.Question) == DialogResult.Yes); 

它的工作,但它真的很煩人一起重現其他方法。我想用executeRequest不僅

如果我在C編碼,我會用#define ASK_USER_TO_RETRY(funcname) ...code...。但在C#中,我還沒有找到以這種方式重用一段代碼的方法。有些想法?

回答

4

您可以創建方法,它接受委託(將要執行的方法):

public void Execute(Action action) 
{ 
    do 
    { 
     try 
     { 
      action(); 
      return; 
     } 
     catch (Exception exception) 
     { 
      ErrorMessagesUtils.ShowTaskErrorMessage(exception); 
     } 
    } while (MessageBox.Show("Failed : Retry ?", "Error", 
       MessageBoxButtons.YesNo, 
       MessageBoxIcon.Question) == DialogResult.Yes); 
} 

用法:

Execute(executeRequest); 
+0

我會做同樣的方式。在這裏你可以閱讀更多關於委託的內容(這就像是指向C中的方法的指針):http://msdn.microsoft.com/en-us/library/ms173171(v=vs.80).aspx在它之後,你可以閱讀關於lambda表達式:http://msdn.microsoft.com/en-us/library/bb397687.aspx – 2011-01-21 13:36:51

+1

該死的,你打我三十秒:) – 2011-01-21 13:37:11

1

它始終是一個很悲哀的場面,觀看用戶在乒乒乓乓重試按鈕沒有得到任何地方。他們也保持了一段時間,希望有奇蹟。半分鐘後,他們會將鼠標切換到左側。

這個問題的一般問題是,他們會責怪的問題。即使你沒有任何關係,也無法解決問題。畢竟,它是承諾重試將是有道理的。他們很快就會失去對程序員和產品的信心,因爲他們可以使用並且物有所值。不要這樣做,除非你的實際上在你的代碼中有一個方法來執行不同的策略。這很少見。

0

即使在使用宏的C這可能是一個壞主意。如你所知,使用預處理器你甚至不會看到編譯器看到的東西。我假設一個函數指針會更適合這種情況。

因此,正如其他人所說,在C#中函數指針被代表替換。如果您願意的話,您可以將它們視爲類型安全函數指針

我會建議Pro C# 2010 and the .NET 4 PlatformC# Language Specification