2016-04-22 2 views
0

Я видел примеры того, как преобразовать строку в тип класса, но мне не удалось применить ту же логику к классу, у которого есть конструктор, который сам берет строку как параметр. Это то, что я видел на других постах.C# преобразовать строку в класс с конструктором со строковым параметром

Type type = Type.GetType("classNameAsString"); 
object instance = Activator.CreateInstance(type); 

То, что я хочу сделать, это применить то же самое к этому случаю

public class ExampleClass 
{ 
    public ExampleClass(string strParameter) 
    { 
    } 
} 

я обычно создать экземпляр ExampleClass в

var exClassInst = new ExampleClass("stringParam"); 

Как я могу добиться того же, но первое преобразование Строка «ExampleClass» для ввода и последующего создания экземпляра. Спасибо за помощь.

ответ

0

Вы все еще можете использовать Activator но используя CreateInstance перегрузки с аргументами конструктора:

Type type = Type.GetType("Namespace.ExampleClass"); 
object instance = Activator.CreateInstance(type, "string param"); 
+0

Спасибо за быстрый ответ. До создания экземпляра с параметром string кажется прекрасным, однако, когда я пытаюсь получить доступ к методам класса через instance.DoSomething(), я получаю объект с ошибкой, не содержит определения для DoSomething .... Когда я создаю экземпляр класс, я вижу методы класса. Не уверен, что происходит. – user2217057

+0

@ user2217057: Это потому, что 'CreateInstance' возвращает экземпляр как' object', вы должны отдать его в 'ExampleClass', чтобы иметь возможность использовать соответствующие члены этого класса. –

+0

Как бы вы выполняли кастинг, если тип класса определяется динамически в цикле на основе заданного типа строки? Мне может быть что-то не хватает, но приведение типа объекта в определенный тип класса будет работать, если тип класса уже известен. – user2217057

0

Вы можете попробовать найти конструктор и вызвать его.

ConstructorInfo ci = type.GetConstructor(BindingFlags.Instance | BindingFlags.Public, null, new Type[0], null); 
return (ExampleClass)ci.Invoke(new Object[] { "stringParam"); 
0

Activator.CreateInstance уже следующий overload:

Создает экземпляр указанного типа с помощью конструктор, который лучше всего соответствует указанным параметрам.

public static object CreateInstance(
    Type type, 
    params object[] args 
) 
Смежные вопросы