【问题标题】:JavaScript-like anonymous functions in C#C# 中的类似 JavaScript 的匿名函数
【发布时间】:2009-07-31 10:50:32
【问题描述】:

C#可以做以下事情吗?:

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

我想做一些事情(C# 伪代码):

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

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

【问题讨论】:

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


    【解决方案1】:
    var greeting = "Hello" + new Func<String>(() => " World")() + "!";
    

    【讨论】:

    • 您的回答对我有所帮助,但与 Jon Skeet 的回答不匹配。
    【解决方案2】:

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

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

    有点难看,但可以。

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2013-10-12
        • 1970-01-01
        • 2011-06-24
        • 1970-01-01
        • 1970-01-01
        • 2011-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多