=> 语法的用法和解释[重复]

Posted

技术标签:

【中文标题】=> 语法的用法和解释[重复]【英文标题】:usage and explanation of => syntax [duplicate] 【发布时间】:2015-07-29 16:37:19 【问题描述】:

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

谁能解释一下这个语法的用法?

select x => x.ID

【问题讨论】:

Lambda expressions: Why should I use them? 【参考方案1】:

谁能解释一下 => 语法的用法?

“胖箭头”语法用于在 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");

您可以在此处看到,编译器创建了一个名为Program.CS$&lt;&gt;9__CachedAnonymousMethodDelegate1Func&lt;string, bool&gt; 类型的缓存委托和一个名为&lt;Main&gt;b__0 的命名方法,它们被传递给Where 子句。

【讨论】:

[++] 表示“胖箭头”,一直想知道如何搜索它。【参考方案2】:

此语法由 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 表达式对于传达简单的委托非常有用。

【讨论】:

【参考方案3】:

这是用于lambda expresssion 的语法。

以下语法表示,选择对象x并从中获取x.ID值。

select x => x.ID

【讨论】:

以上是关于=> 语法的用法和解释[重复]的主要内容,如果未能解决你的问题,请参考以下文章

需要类语法解释[重复]

这是啥语法,含义明确[重复]

有人可以解释这些通用语法吗? [重复]

PHP函数返回MySQL语法错误[重复]

sql中union 和 union all的区别

奇怪的 C++ 新运算符用法 [重复]