SomeMethod(()=> x.Something)在C#中的含义是什么

Are*_*win 6 c# lambda

(注意代码是一个例子)

我有以下语法:

SomeMethod(() => x.Something) 
Run Code Online (Sandbox Code Playgroud)

第一个括号在表达式中的含义是什么?

我也很好奇你如何从传入的参数中获取属性名称.这是不可能的?

Mar*_*ett 8

第一个括号在表达式中的含义是什么?

它是不带参数的方法的lambda语法.如果它需要1个参数,它将是:

SomeMethod(x => x.Something);
Run Code Online (Sandbox Code Playgroud)

如果它需要n + 1个参数,那么它将是:

SomeMethod((x, y, ...) => x.Something);
Run Code Online (Sandbox Code Playgroud)

我也很好奇你如何从传入的参数中获取属性名称.这可能吗?

如果你SomeMethod需要Expression<Func<T>>,那么是:

void SomeMethod<T>(Expression<Func<T>> e) {
    MemberExpression op = (MemberExpression)e.Body;
    Console.WriteLine(op.Member.Name);
}
Run Code Online (Sandbox Code Playgroud)


sep*_*p2k 7

()是一个空参数列表.您正在定义一个不带参数和返回的匿名函数x.Something.

编辑:它的不同之处在于x => x.Something后者需要一个参数并且在该参数上调用Something.以前的版本x必须存在于函数之外的某个地方,并且在外部调用Something x.对于后一个版本,不必有外部x,即使存在,仍然会在函数的参数上调用Something而不是其他内容.