将对象强制转换为未知类型



我想创建一个动态方法,该方法使用基于参数的任何对象填充下拉列表。这是我的代码:

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

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

相关内容

  • 没有找到相关文章

最新更新