将对象转换为未知类型
Cast object to unknown type
我想创建一个动态方法,根据参数使用任何对象填充下拉列表。这是我的代码:
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());
或者,至少,您可以使用反射来获取所需的属性。
我想创建一个动态方法,根据参数使用任何对象填充下拉列表。这是我的代码:
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());
或者,至少,您可以使用反射来获取所需的属性。