2015-06-17 199 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