2015-06-17 147 views
-1

我想创建一个动态方法,该方法根据参数填充任何对象的下拉列表。这里是我的代码:将对象投射到未知类型

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的类型,但是当我编译我得到一个错误。

+0

什么是错误? – Sayse

+0

@Sayse无法找到类型或命名空间'obj' – jmc

+0

您必须投射到'object'。而不是'obj' –

回答

3

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

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

+0

我已经应用第二种解决方案,因为我是运行.NET 3.5。 – jmc