代码之家  ›  专栏  ›  技术社区  ›  cllpse

C语言中类似于javascript的匿名函数#

  •  0
  • cllpse  · 技术社区  · 15 年前

    以下可以用C语言完成吗?:

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

    我想沿着这条线(C伪代码)做一些事情:

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

    基本上,我希望实现一些逻辑的内联范围,而不是将块逻辑移动到单独的方法中。

    3 回复  |  直到 15 年前
        1
  •  2
  •   Jon Skeet    15 年前

    如果使用匿名类型,则必须显式转换匿名方法或lambda表达式;如果要分配给已经知道该类型的属性,则不会。例如:

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

    虽然稍微有点难看,但还是能用的。

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

    Console.WriteLine("{0}: {1}", cell.CssClass, cell.Text());
    
        2
  •  9
  •   cllpse    15 年前
    var greeting = "Hello" + new Func<String>(() => " World")() + "!";
    
        3
  •  2
  •   cllpse    15 年前

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

    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 "";
        })()}
    });