使用 lambda 获取扩展方法的第一个参数的属性? (x => x.请)
我正在尝试这样做:
var order = new BuildingOrder(); //has a Sale property
var sale = order.ConfusinglyGet(() => order.Sale); //get value of order.Sale
到目前为止我能弄清楚的是:
public static O ConfusinglyGet<O>(this object i, Expression<Func<O>> expression)
{
return expression.Compile()();
}
这会返回属性值吗?
我最终希望能够检查 i
是否为 null 并可选择返回 new O()
,例如
public static O FreemasonsOnly<I,O>(this I i, Expression<Func<O>> expression)
where I : class,
where O : class, new()
{
return i != null ? expression.Compile()() : new O();
}
I'm trying to do this:
var order = new BuildingOrder(); //has a Sale property
var sale = order.ConfusinglyGet(() => order.Sale); //get value of order.Sale
So far all I can figure out is this:
public static O ConfusinglyGet<O>(this object i, Expression<Func<O>> expression)
{
return expression.Compile()();
}
Will this return the property value?
I ultimately want to be able to check if i
is null and optionally return new O()
like
public static O FreemasonsOnly<I,O>(this I i, Expression<Func<O>> expression)
where I : class,
where O : class, new()
{
return i != null ? expression.Compile()() : new O();
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您不需要使用
Expression
进行额外的间接级别,因为您没有在示例中传递表达式:您正在传递一个简单的Func
这应该为您工作:
You do not need an extra level of indirection with
Expression
, because you are not passing an expression in your example: you are passing a simpleFunc<I,O>
This should work for you:
你想要的看起来是:
What it looks like you want is: