获取扩展方法的属性';第一个带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();
}

获取扩展方法的属性';第一个带lambda的参数?(x=>;x.please)

您不需要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();
}