2010-10-19 68 views
6

我能夠編譯代碼,其中包括這樣的:C#;在沒有單獨聲明方法的情況下創建新的代表?

OperationDelegate myOpDelegate; 
static OperatorDefinition[] definitions ={ 
       new OperatorDefinition("+",2,3,true, new OperationDelegate(OperationAdd)), 
      }; 
delegate double OperationDelegate(double[] args); 
static double OperationAdd(double[] args) 
      { 
       return args[0] + args[1]; 
      } 

,但我覺得我的代碼看起來更清潔,如果我可以做更多的事情是這樣的:

OperationDelegate myOpDelegate; 
static OperatorDefinition[] definitions ={new OperatorDefinition("+",2,3,true, new OperationDelegate({return args[0]+args[1]}))}; 
delegate double OperationDelegate(double[] args); 

,因爲我想定義的一切關於每個OperatorDefinition在一個地方,而不是單獨定義函數。有沒有辦法在C#中做到這一點?

(約我的代碼的任何其他的批評是值得歡迎的,太)

+1

嘗試lambda表達式...他們是整齊,乾淨,簡潔。 – explorer 2010-10-19 20:22:57

回答

8

查找到匿名方法......比如這個:C# - Anonymous delegate

+1

謝謝;只要知道「匿名代表」這個詞讓我能夠很快找到大量的例子。 – divider 2010-10-19 20:10:09

+0

「我不知道我不知道什麼」〜當我遇到那個時,我'討厭'。很高興你找到你需要的東西@divider – jcolebrand 2010-10-19 20:12:41

6

您可以使用Lambda表達式從淨3.5:

static OperatorDefinition[] definitions ={ 
    new OperatorDefinition("+",2,3,true, 
     args => args[0] + args[1]) 
    }; 

在你OperatorDefinition構造函數中,最後一個參數應該是類型Func<double[],double>

見: http://msdn.microsoft.com/en-us/library/bb397687.aspx

+0

我以「new OperatorDefinition(」*「,2,4,true,delegate(double [] args){return args [0] * args [1];}」;這有什麼比你的更糟? – divider 2010-10-19 20:12:47

+0

這是一個味道問題 - 我認爲Lambda更短,更易讀 – Tor 2010-10-19 20:17:01

+0

感謝您的幫助,但MSDN鏈接被截斷。 – divider 2010-10-19 20:23:22

相關問題