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

Zee*_*nef 2 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";
Run Code Online (Sandbox Code Playgroud)

如何CityNamedataSource对象类型的对象获取List ?

Jon*_*eet 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();
Run Code Online (Sandbox Code Playgroud)

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