2014-06-02 2 views
0

У меня есть имя класса как строку, что я получил с помощью TYPEимя класса в виде строки в определении коллекции в C#

Type type = myvar.GetType(); 
string _className = type.ToString(); // getting the class name 

Мой вопрос заключается в том, как использовать эту строку _className здесь в коде ниже?

var data = this.ItemsSource as ObservableCollection<**_className**>()[2]; 

Здесь ItemsSource является общим.

Заранее спасибо.

+0

http://stackoverflow.com/questions/9842222/dynamic-cast-to-generic-type –

+0

Вместо использования 'string' , вы можете использовать значение 'type' вместе с некоторым отражением для создания экземпляра родового типа. Вы не можете использовать любой из них непосредственно в коде (т. Е. Вы не можете написать код формы «ObservableCollection ', где 'xxx' является переменной). –

+0

Могу попробовать с помощью 'Type.GetType (_className)' выбрать тип. – Jite

ответ

2

Вы можете сделать это с помощью отражения и Activator.CreateInstance метод:

Type type = myvar.GetType(); 
string className = type.ToString(); 
Type genericType = Type.GetType(className); 
Type observableCollectionType = typeof(ObservableCollection<>); 
Type constructedType = observableCollectionType.MakeGenericType(genericType); 
var constructedInstance = Activator.CreateInstance(constructedType); 
+0

Привет, даже это работает, спасибо :) –

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