将对象转换为通用列表以获取项目列表

时间:2014-06-19 09:02:25

标签: c# casting generic-list

有没有办法可以将未知对象转换为通用列表,以便通过给定的ProperyName从对象获取项目列表。 对象可以是List<Country>List<Area>List<Region>等任何通用列表,但我需要按给定的displayMember获取数据。

例如:

List<City> listCities = new List<City>(); //Cities data with (CityID, CityName)
object dataSource = listCities;
string displayMember = "CityName";
string valueMember = "CityID";

如何从CityName对象类型的对象中获取dataSource的列表?

1 个答案:

答案 0 :(得分:8)

基本上你必须使用反射。例如:

// This assumes it really is just a List<T>...
IEnumerable list = (IEnumerable) dataSource;
Type elementType = list.GetType().GetGenericArguments()[0];
PropertyInfo property = elementType.GetProperty(displayMember);
List<object> displayValues = list.Cast<object>()
                                 .Select(v => property.GetValue(v, null))
                                 .ToList();

(您需要添加一堆错误检查 - 例如,property不是null ...)