2011-07-28 90 views
14

我是一個非常新的C#。只是玩弄它。不是爲了一個真正的目的。Lambda Anonymous函數作爲參數

void makeOutput(int _param) 
{ 
    Console.WriteLine(_param.ToString()); 
} 

//... 
// Somewhere in a code 
{ 
    makeOutput( /* some not c# code for an example for what do I want */ function : int() { return 0; } ); 
} 

是否可以使用REAL匿名函數(意味着返回結果)?

我不想使用委託如

// Somewhere in a code 
{ 
    Func<int> x =() => { return 0; }; 

    makeOutput(x()) 
} 

此外,我不希望改變方法的參數類型,如

void makeOutput(Func<int> _param) 
{ 
} 

這是非常普遍的決定。


一切都很好。我只是明白我想要不可能的事情。我想聲明匿名函數並在相同的地方執行它。注意:DIRECT聲明和直接調用沒有通用包裝器。

// flash-like (as3) code /// DOES NOT COMPILE 
makeOutput( (function : int(){ return 0; })() ); 
+1

我不明白的問題。你可以改述或使用一些psudocode? –

+0

爲什麼你不想改變參數類型? – SLaks

+0

因爲他有時可能只想使用'int'? – Vercas

回答

30

是的。
它被稱爲代表。

代表是(或多或少)正常類型;你可以像任何其他類型一樣將它們傳遞給函數。

void makeOutput(Func<int> param) { 
    Console.WriteLine(param()); 
} 

makeOutput(delegate { return 4; }); 
makeOutput(() => { return 4; }); 
makeOutput(() => 4); 

編輯 ED問題沒有意義。

C#是類型安全的。
如果該方法不需要函數作爲參數,則不能將該方法作爲參數。

5
void makeOutput(Func<int> _param) 
{ 
    makeOutput(_param()); 
} 

void makeOutput(int _param) 
{ 
    Console.WriteLine(_param.ToString()); 
} 

這可以做到這一點!
這是簡單的方法:重載!

+0

@Focker這是否有幫助? – Vercas

4

我有類似的問題,朋友給我的方式:

makeOutput((new Func<Int32>(() => { return 0; })).Invoke()); 

希望這將有助於