gpt4 book ai didi

c# - 如何使用 lambda 获取作为参数发送的属性的名称

转载 作者:行者123 更新时间:2023-11-30 20:47:31 24 4
gpt4 key购买 nike

我可以有这样的方法:

public void MyMethod<T, TResult>( string propertyName, ... ){
var name = propertyName;
return {property with correct name from some object that is of type TResult}
}

然后这样调用它:

MyMethod<SomeClass>("SomePropertyName");

在方法中获取属性名。但是,我不喜欢将该属性名称作为字符串发送,以防将来 SomeClass 发生变化,并且编译器也无法验证该属性名称是否与 TResult 类型的属性匹配.

我宁愿这样调用它:

MyMethod<SomeClass>(c => c.SomePropertyName);

但我不确定那时我的方法会是什么样子。我试过这个的变体:

public void MyMethod<T>( Func<T,TResult> property, ... ){
var name = {do some cleverness on property here to extract the actual name of the property inside the expression};
return {property with correct name from some object that is of type TResult}
}

在 C# 中有什么干净利落的方法可以做到这一点吗?

最佳答案

你不能调查Func<>代表有很多细节。你想审问一个 Expression .. 类似这样的东西(未经测试.. 但应该接近):

public void MyMethod<T>(Expression<Func<T,TResult>> expr, ... ){
var expression = (MemberExpression)expr.Body;
var name = expression.Member.Name;

// .. the rest here using "name"
}

用法是一样的:

MyMethod<User>(u => u.UserId); // name will be "UserId"

关于c# - 如何使用 lambda 获取作为参数发送的属性的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25744642/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com