の署名を持つサードパーティ API に渡すために、実行時に式を作成しようとしています
Expression<Func<T, object>>
。以下は私がこれまでに持っているものです。これは参照型では問題なく機能しますが、値型では例外が発生します (3 行目)。
タイプ 'System.Boolean' の式は、戻りタイプ 'System.Object' には使用できません
これは、私が扱っていないボクシングの問題によるものだと思います。
を追加しようとしましExpression.TypeAs(property, typeof(object))
たが、API は を生成するため、この入力を受け入れ/解析しませんobj=> (obj.Foo As Object)
。
任意の型に必要な署名に一致する式を作成する方法について、誰かアイデアはありますか?
// must be in the form of 'obj => obj.Foo', or the API wont parse
private static Expression<Func<T, object>> CreatePropertyExpression(PropertyInfo propertyInfo)
{
var instanceParam = Expression.Parameter(propertyInfo.DeclaringType, "obj");
var property = Expression.Property(instanceParam, propertyInfo);
var lambda = Expression.Lambda<Func<T, object>>(property, instanceParam); // kaboom
return (Expression<Func<T, object>>)lambda;
}