获取扩展方法的属性';第一个带lambda的参数?(x=>;x.please)
本文关键字:please 参数 gt 方法 扩展 属性 获取 第一个 lambda | 更新日期: 2023-09-27 18:22:30
我正在尝试这样做:
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
是否为空,并可以像一样返回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();
}
您不需要Expression
的额外间接级别,因为您在示例中没有传递表达式:您传递的是一个简单的Func<I,O>
这应该对你有用:
public static O FreemasonsOnly<I,O>(this I i, Func<I,O> f)
where I : class where O : class, new()
{
return i != null ? f(i) : new O();
}
您想要的是:
public static O ConfusinglyGet<T, O>(this T i, Expression<Func<T, O>> expression) where O : class, new()
{
return expression.Compile()(i) ?? new O();
}