我的问题源于MVC的SelectList(以及前几代)。基本上该类接受IEnumerable并使用您定义为字符串的成员。
这是我感兴趣的C#的一个方面,但却找不到例子:(
修改:
我最终使用System.Web.UI中的DataBinder.Eval()
它仍然具有反射的开销,但允许您传递对象和包含所需成员的层次结构的字符串,从而使事情变得更容易。现在这并不是什么意思,但是这个项目的目的是为了获取Linq数据,所以不必担心它会让我的生活变得更轻松。
感谢大家的帮助。
答案 0 :(得分:4)
虽然我不确定它的实现,但我希望它能使用反射。
基本上,您调用Type.GetProperty
或Type.GetMethod
来获取相关成员,然后向其询问特定实例的该属性的值(或调用方法等)。或者,有Type.GetMembers
,Type.GetMember
等。
如果你想能够使用“Person.Mother.Name”或类似的“路径”,你必须自己解析,据我所知。 (可能有一些框架可以为您完成,但它们不在反射API中。)
这是一个简短而完整的例子:
using System;
using System.Reflection;
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
class Test
{
static void Main()
{
Person jon = new Person { Name = "Jon", Age = 33 };
ShowProperty(jon, "Name");
ShowProperty(jon, "Age");
}
static void ShowProperty(object target, string propertyName)
{
// We don't need no stinkin' error handling or validity
// checking (but you do if you want production code)
PropertyInfo property = target.GetType().GetProperty(propertyName);
object value = property.GetValue(target, null);
Console.WriteLine(value);
}
}
答案 1 :(得分:1)