C#中类似JavaScript的匿名函数

时间:2009-07-31 10:50:33

标签: c# javascript anonymous-methods anonymous-function

可以在C#中完成以下操作吗?:

var greeting = "Hello" + function ()
{
    return " World";
}() + "!";

我想做一些与此相关的事情(C#伪代码):

var cell = new TableCell { CssClass = "", Text = return delegate ()
{
     return "logic goes here";
}};

基本上我想实现某些逻辑的内联作用域,而不是将该块逻辑移动到单独的方法中。

3 个答案:

答案 0 :(得分:9)

var greeting = "Hello" + new Func<String>(() => " World")() + "!";

答案 1 :(得分:2)

如果您使用的是匿名类型,那么您必须明确地转换匿名方法或lambda表达式;如果您要分配已知类型的属性,则不会。例如:

var cell = new TableCell { CssClass = "", Text = (Func<string>) (() =>
{
     return "logic goes here";
})};

稍微丑陋,但它确实有效。

但是,是的,您当然可以使用这样的匿名函数。当你想要检索文本时,你需要明确地调用它,请注意:

Console.WriteLine("{0}: {1}", cell.CssClass, cell.Text());

答案 2 :(得分:2)

我自己会提出一个更详细的答案:

var tr = new TableRow { CssClass = "" };

tr.Cells.AddRange(new []
{
    new TableCell { CssClass = "", Text = "Hello" },
    new TableCell { CssClass = "", Text = new Func<String>(() => 
    {
        // logic goes here
        return "";
    })()}
});