2015-06-17 4 views
-1

Я хотел бы создать динамический метод, который заполняет выпадающий список любым объектом на основе параметров. Вот мой код:Объект Cast до неизвестного типа

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 к типу, но я получаю сообщение об ошибке при компиляции.

+0

Какая ошибка? – Sayse

+0

@ Невозможно найти тип или пространство имен '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

Смежные вопросы