gpt4 book ai didi

c# - 如何从属性访问 lambda 中提取对象引用

转载 作者:太空宇宙 更新时间:2023-11-03 14:30:14 24 4
gpt4 key购买 nike

这是 Get name of property as a string 的后续问题.

给定一个方法 Foo(为简洁起见省略了错误检查):

// Example usage: Foo(() => SomeClass.SomeProperty)
// Example usage: Foo(() => someObject.SomeProperty)
void Foo(Expression<Func<T>> propertyLambda)
{
var me = propertyLambda.Body as MemberExpression;
var pi = me.Member as PropertyInfo;
bool propertyIsStatic = pi.GetGetMethod().IsStatic;
object owner = propertyIsStatic ? me.Member.DeclaringType : ???;
...
// Execute property access
object value = pi.GetValue(owner, null);
}

我有静态属性案例,但不知道如何在实例属性案例中获取对 someObject 的引用。

提前致谢。

最佳答案

MemberExpression 有一个名为 Expression 的属性,它是成员访问发生的对象。

您可以通过编译一个返回它的函数来获取该对象:

var getSomeObject = Expression.Lambda<Func<object>>(me.Expression).Compile();

var someObject = getSomeObject();

关于c# - 如何从属性访问 lambda 中提取对象引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2822578/

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