将对象强制转换为未知类型
本文关键字:未知 类型 转换 对象 | 更新日期: 2023-09-27 17:56:38
我想创建一个动态方法,该方法使用基于参数的任何对象填充下拉列表。这是我的代码:
PopulateDropDownList(ddl, GetList(), typeof(MyClass));
public void PopulateDropDownList(DropDownList ddl, IEnumerable list, Type type)
{
object obj = Activator.CreateInstance(type);
foreach (var item in list)
ddl.Items.Add(new ListItem(((obj)item).Name, ((obj)item).ID.ToString()));
}
基本上,我想做的是将Name
和ID
转换为类型,但是我在编译时遇到错误。
可以使用
dynamic
关键字,假设您运行的是 .NET 4 或更高版本
public void PopulateDropDownList(DropDownList ddl, IEnumerable list, Type type)
{
foreach (var item in list)
ddl.Items.Add(new ListItem(((dynamic)item).Name, ((dynamic)item).ID.ToString()));
}
或者,(如果)可以使用泛型版本和传递访问器来获取键和值。
public void PopulateDropDownList<T>(DropDownList ddl, IEnumerable list, Func<T, string> key, Func<T, string> value)
{
foreach (T item in list)
ddl.Items.Add(new ListItem(key(item), value(item));
}
PopulateDropDownList<MyClass>(ddl, GetList(), x => x.Name, x => x.ID.ToString());
或者,至少可以使用反射来获取所需的属性。