将对象转换为未知类型

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()));
}

基本上,我想做的是将 NameID 转换为一个类型,但我在编译时遇到错误。

您可以使用 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());

或者,至少,您可以使用反射来获取所需的属性。