【发布时间】:2011-11-23 13:27:21
【问题描述】:
我有一个非强类型且依赖于反射的工作设置。
我有课,比如说
class Person{
public string FirstName {get ; set;}
public string LastName {get; set;}
public int Age {get; set;}
...
// some more public properties
}
和
class CellInfo {
public string Title {get; set;}
public string FormatString {get; set;}
}
我有一本这样的字典
Dictionary<string, CellInfo> fields = new Dictionary<string, CellInfo>();
fields.Add("FirstName", new CellInfo {Title = "First Name", FormatString = "Foo"});
fields.Add("LastName", new CellInfo {Title = "Last Name", FormatString = "Bar"});
这是一个简单的字典,包含属性名称和一些关于它们的信息。 我将字典传递给另一个处理 Person 实例的模块,我这样做了
Dictionary<string, CellInfo> fields = SomeMethodToGetDictionary();
foreach(Person p in someCollection)
{
foreach(var field in fields)
{
object cellValue = type(Person).GetProperty(field.Key).GetValue(p, null);
// use cellValue and info on field from field.Value somewhere.
...
}
}
这种为字段名称传递字符串并使用反射的方法有效,但我想知道是否有一种强类型的方法可以做到这一点。
我想到的是拥有一个存储 linq 表达式的属性,就像这样
fields.Add("FirstName", new CellInfo
{
Title = "First Name",
FormatString = "Foo",
EvalExpression = p => p.FirstName
});
在使用过程中,以某种方式在人员对象上使用EvalExpression 并获取属性值。我不知道从哪里开始,也不知道拥有这样一个可评估的属性会是什么样的语法。我是函数委托和表达式树的新手,我什至不知道要搜索的正确关键字。希望我的描述清楚;如果没有,请告诉我,必要时我会详细说明。
任何帮助将不胜感激。
【问题讨论】:
标签: c# lambda expression