我有一个工作设置,它不是强类型的,依赖于反射。
我有一个类,比如说:
"我有这样一个字典"
这是一个带有属性名称和一些相关信息的简单字典。 我将该字典传递给另一个模块来处理个人实例,然后执行操作。
这种通过传递字符串作为字段名并使用反射的方法是可行的,但我想知道是否有一种强类型的方法来实现这个。 我所考虑的是拥有一个存储Linq表达式的属性,类似于这样:
在使用过程中,以某种方式在人对象上使用
我有一个类,比如说:
class Person{
public string FirstName {get ; set;}
public string LastName {get; set;}
public int Age {get; set;}
...
// some more public properties
}
and
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"});
这是一个带有属性名称和一些相关信息的简单字典。 我将该字典传递给另一个模块来处理个人实例,然后执行操作。
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
并获取属性值。我不知道从哪里开始或这样具有可评估属性的语法是什么。我对函数委托和表达式树还很陌生,甚至不知道要搜索哪些关键字。希望我的描述清楚;如果不清楚,请告诉我,我会提供必要的详细信息。非常感谢任何帮助。
Func<Person, string>
是您拥有的委托的简写,有人没有意识到这一点,给了您一个踩。 - Professor Chaos