2011-07-28 56 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()); 

希望这将有助于