4

場合によっては(プロパティタイプがブール値であるように見える)、プロパティを参照するためにラムダ式が使用されるという問題があります。私はこれを使ってその名前を取得します。問題は、式が追加のConvert()関数を持つように変更される場合があることです。

例えば

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

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

propertyLambdaがどのように見えるか、そして私が期待することConvert(o.MyBooleanProperty)ではないことが何が起こっているのか。o.MyBooleanProperty

4

1 に答える 1

3

はであるConvertため、が追加されますが、結果はオブジェクトである必要があります。ソースオブジェクトタイプと結果タイプの両方でメソッドをジェネリックにした場合、次のようにはなりません。o.MyBooleanPropertyboolConvert

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)
于 2012-06-26T00:12:21.787 に答える