使用和解释=>句法

时间:2015-05-18 08:48:20

标签: c#

我看到很多带有=>语法的C#代码示例。

任何人都可以解释这种语法的用法吗?

select x => x.ID

3 个答案:

答案 0 :(得分:13)

  

任何人都可以解释一下=>的用法语法?

"胖箭"语法用于在C#中形成一个名为Lambda Expression的东西。它只是代表创作的语法糖。

你提供的表达方式没有任何意义,但你可以看到它在LINQ中使用了很多:

var strings = new[] { "hello", "world" };
strings.Where(x => x.Contains("h"));

语法x => x.Contains("h")将由编译器推断为Func<string, bool>,它将在编译期间生成。

修改

如果你真的想看看幕后发生的事情,那么你可以看看任何.NET反编译器中的反编译代码:

[CompilerGenerated]
private static Func<string, bool> CS$<>9__CachedAnonymousMethodDelegate1;

private static void Main(string[] args)
{
    string[] strings = new string[]
    {
        "hello",
        "world"
    };

    IEnumerable<string> arg_3A_0 = strings;
    if (Program.CS$<>9__CachedAnonymousMethodDelegate1 == null)
    {
        Program.CS$<>9__CachedAnonymousMethodDelegate1 = new Func<string, bool>
                                                             (Program.<Main>b__0);
    }
    arg_3A_0.Where(Program.CS$<>9__CachedAnonymousMethodDelegate1);
}

[CompilerGenerated]
private static bool <Main>b__0(string x)
{
    return x.Contains("h");
}

您可以在此处看到,编译器创建了一个名为Func<string, bool>的类型为Program.CS$<>9__CachedAnonymousMethodDelegate1的缓存委托,以及一个名为<Main>b__0的命名方法,该方法将传递给Where子句。< / p>

答案 1 :(得分:4)

此语法用于lambda表达式 - https://msdn.microsoft.com/en-us/library/bb397687.aspx

delegate int del(int i);
static void Main(string[] args)
{
    var myDelegateLambda = x => x * x;  // lambda expression
    Func<int, int> myDelegateMethod = noLambda; // same as mydelegate, but without lambda expression
    int j = myDelegateLambda(5); //j = 25
}

private int noLambda(int x)  
{
    return x * x;
}

如您所见,lambda表达式对于传达简单委托非常有用。

答案 2 :(得分:1)

这是lambda expresssion使用的语法。

语法下方意味着,选择对象x并从中获取x.ID值。

select x => x.ID