有人可以解释这个C#lambda语法吗?

前端之家收集整理的这篇文章主要介绍了有人可以解释这个C#lambda语法吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我最近来了一个静态方法,声明为:
public class Foo
{
  public static Func<HtmlHelper,Propertyviewmodel,string> Render = (a,b) =>
  {
    a.RenderPartial(b);
    return "";
  };
}

Intellisense建议使用(例如):

string s = Foo.Render(htmlHelper,propertyviewmodel);

以下是等同的:

public static string Render(HtmlHelper a,Propertyviewmodel b)
{
  a.RenderPartial(b);
  return "";
}

A)第一种风格的名称是什么?我意识到它正在使用lambdas;这是绊倒我的标志.我不能标记它)

B)如果两个代码块是等效的,那么后者使用前者的好处是什么?

解决方法

在大多数情况下,它们似乎在功能上相当.实际上你可以通过一个普通的方法作为一个变量.

但是有一些微妙的差异,如能够将功能重新定义为别的东西.如果您使用反射,也可能会有所不同.它可能不会在类的方法列表中返回. (不是100%肯定在反射部分)

以下显示了将方法作为变量传递,以及第二种方式如何允许重新定义Func,如果它是一种常规方法将是不可能的.

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(GetFunc());   //Prints the ToString of a Func<int,string>
        Console.WriteLine(Test(5));     //Prints "test"
        Console.WriteLine(Test2(5));    //Prints "test"
        Test2 = i => "something " + i;
        Console.WriteLine(Test2(5));    //Prints "something 5"
        //Test = i => "something " + i; //Would cause a compile error

    }

    public static string Test(int a)
    {
        return "test";
    }

    public static Func<int,string> Test2 = i =>
    {
        return "test";
    };

    public static Func<int,string> GetFunc()
    {
        return Test;
    }
}

这只是让我想到…如果所有的方法都是这样宣称的,你可以在C#中有真正的first class functions …有趣….

猜你在找的C&C++相关文章