簡単な質問:
特定のエンティティの特定のプロパティを表示したい:
public void DisplayEntity<TEntity>(TEntity entity, params Expression<Func<TEntity, TProperty>> properties)
{
// access the properties values
Console.Write(propertyValue);
}
だから私は簡単にこれを行うことができます:
DisplayEntity(Contact contact, c => c.Name);
DisplayEntity(Contact contact, c => c.Name, c => c.Tel);
DisplayEntity
これを実行できるように関数を記述する方法がわかりません。
答え
フロリアンの答えに基づいて、ラムダ式のものに合わせて、少し要約しました。
static void WriteEntity<T>(T entity, params Expression<Func<T, object>>[] properties)
{
properties.ToList().ForEach(x =>
{
var f = x.Compile();
MemberExpression me;
switch (x.Body.NodeType)
{
case ExpressionType.Convert:
case ExpressionType.ConvertChecked:
var ue = x.Body as UnaryExpression;
me = ((ue != null) ? ue.Operand : null) as MemberExpression;
break;
default:
me = x.Body as MemberExpression;
break;
}
var memberInfo = me.Member;
Console.WriteLine("{0}: {1}", memberInfo.Name, f(entity));
});
}