=>语法的用法和解释

Yu *_*kan 9 c#

我看到了大量带有=>语法的C#代码示例.

任何人都可以解释一下这种语法的用法是什么?

select x => x.ID
Run Code Online (Sandbox Code Playgroud)

Yuv*_*kov 13

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

"胖箭头"语法用于在C#中形成称为Lambda表达式的东西.它只是代表创作的语法糖.

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

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

语法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");
}
Run Code Online (Sandbox Code Playgroud)

你可以在这里看到的是,编译器创建类型的缓存代表Func<string, bool>呼吁Program.CS$<>9__CachedAnonymousMethodDelegate1,并呼吁命名方法<Main>b__0,其获得通过的Where条款.

  • [++]代表“胖箭头”,总是想知道如何搜索它。 (2认同)

Paw*_*aga 5

此语法由 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;
}
Run Code Online (Sandbox Code Playgroud)

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