gpt4 book ai didi

c# - Property Lambda 表达式获得额外的 Convert(p=>p.Property)

转载 作者:行者123 更新时间:2023-11-30 12:13:40 24 4
gpt4 key购买 nike

我遇到一个问题,在某些情况下(似乎是属性类型为 bool 的情况)lambda 表达式用于引用属性。我用它来得到它的名字;问题是有时表达式被修改为具有额外的 Convert() 函数。

例如

GetPropertyName<TSource>(Expression<Func<TSource, object>> propertyLambda) {...}

var str = GetPropertyName<MyObject>(o=>o.MyBooleanProperty);

发生了什么,propertyLambda 看起来像 Convert(o.MyBooleanProperty) 而不是我期望的 o.MyBooleanProperty

最佳答案

Convert添加,因为 o.MyBooleanPropertybool ,但结果必须是一个对象。如果您在源对象类型和结果类型中都使您的方法通用,那么就不会有 Convert :

GetPropertyName<TSource, TResult>(Expression<Func<TSource, TResult>> propertyLambda)

不幸的是,这意味着您必须指定 TResult明确地:

GetPropertyName<MyObject, bool>(o => o.MyBooleanProperty)

如果您不想那样做,则必须找到一些方法来推断 MyObject ,或者避免需要它。

例如,如果当前对象是MyObject (并且您在实例方法中),您可以更改代码以采用 Func<TResult> :

GetPropertyName(() => this.MyBooleanProperty)

或者您可以包含另一个类型为 TSource 的参数这将帮助您推断类型:

GetPropertyName(myObject, o => o.MyBooleanProperty)

关于c# - Property Lambda 表达式获得额外的 Convert(p=>p.Property),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11198847/

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