C# SomeMethod(()=>;x.Something)在C中是什么意思#

C# SomeMethod(()=>;x.Something)在C中是什么意思#,c#,lambda,C#,Lambda,(注意,代码是一个示例) 我有以下语法: SomeMethod(() => x.Something) 表达式中的第一个括号是什么意思 我还想知道如何从传入的参数中获取属性名。这有可能吗?这是一个问题。也就是说,这是一种创建匿名函数或委托的方法 一般形式为: (input parameters) => expression 如果你有 () => expression 然后创建了一个不带参数的函数,并返回表达式的结果 C#用于确定值的类型,并通过一个捕获局部变量。()是一个

(注意,代码是一个示例)

我有以下语法:

SomeMethod(() => x.Something) 
表达式中的第一个括号是什么意思

我还想知道如何从传入的参数中获取属性名。这有可能吗?

这是一个问题。也就是说,这是一种创建匿名函数或委托的方法

一般形式为:

(input parameters) => expression
如果你有

() => expression
然后创建了一个不带参数的函数,并返回表达式的结果

C#用于确定值的类型,并通过一个

捕获局部变量。
()
是一个空参数列表。您正在定义一个匿名函数,该函数不带任何参数并返回
x.Something

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

该()表示此方法不接受任何参数。 例如,如果您使用lambda表达式分配普通事件处理程序,它将如下所示:

someButton.Click += (s, e) => DoSomething();

我假设x是在方法中的某个地方声明的,如果是,可以将此lambda表达式与没有参数的委托进行比较,并返回x.someproperty类型

delegate{
 return x.someproperty;
}
这与:

() => x.someproperty
表达式中的第一个括号是什么意思

这是不带参数的方法的lambda语法。如果它采用1个参数,则为:

SomeMethod(x => x.Something);
如果它有n+1个参数,那么它应该是:

SomeMethod((x, y, ...) => x.Something);
我还想知道如何从传入的参数中获取属性名。这可能吗

如果您的
SomeMethod
采用
表达式,则为是:

void SomeMethod<T>(Expression<Func<T>> e) {
    MemberExpression op = (MemberExpression)e.Body;
    Console.WriteLine(op.Member.Name);
}
void方法(表达式e){
MemberExpression op=(MemberExpression)e.Body;
Console.WriteLine(op.Member.Name);
}

要获取属性的名称,您需要使用某种方法,使参数的类型为
System.Linq.Expressions.Expression
。然后,您可以通过表达式来确定属性名称。

另请参阅以下两篇博客文章,这两篇文章正好讨论了您的第二个问题,并提供了其他方法:


(或“如何不使用.NET Linq表达式从C#Lambda获取参数名和参数值?”)

Duplicate:Ok抱歉,这是重复的。我很好奇它与
SomethMethod(x=>x.Something)
@Dykam有何不同,谁说它不会呢?会的。试着编译这个例子:在这个例子中,是的,它编译了。正如我所说,返回类型将是“x.someProperty”类型