Lambda \ Anonymous函数作为参数

时间:2011-07-28 22:04:59

标签: c# delegates func

我是C#的新手。只是玩弄它。不是出于真正的目的。

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声明和DIRECT调用。

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

3 个答案:

答案 0 :(得分:30)

是。
它被称为代表。

代表是(或多或少)正常类型;你可以像任何其他类型一样将它们传递给函数。

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

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

您的编辑 ed问题没有意义。

C#是类型安全的 如果方法不希望函数作为参数,则不能将方法作为参数提供。

答案 1 :(得分:5)

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

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

这可以解决问题! 这是简单的方法:重载!

答案 2 :(得分:4)

我有类似的问题,朋友给我指路:

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

希望这会有所帮助