2012-03-14 2 views
2

Я создал динамический метод для создания экземпляра другого типа, но не уверен, почему он дает указанную выше ошибку во время компиляции, также мне нужно снова вернуть возвращаемое значение указанному типу ?GetInstance <T>() 'не может быть выведен из использования. Попробуйте явно указать аргументы типа

internal static T GetInstance<T>() 
    { 
     dynamic obj = Activator.CreateInstance(typeof(T)); 
     return obj; 
    } 

    private Foo f = GetInstance<Foo>(); 
+1

Почему «динамический»? Вам, вероятно, просто нужно «return (T) Activator.CreateInstance (typeof (T));« Но откуда ошибка: ваша функция? Линия, которая его вызывает? – Rup

+0

Хороший вопрос, на самом деле я должен установить другие свойства тоже – BreakHead

+0

И это дает ошибку во время компиляции – BreakHead

ответ

7

Почему вы не просто использовать то, что рекомендует MSDN, которая заключается в следующем:

internal static T GetInstance<T>() where T:new() 
{ 
    return new T(); 
} 

http://msdn.microsoft.com/en-us/library/0hcyx2kd.aspx

EDIT:

Хотя, я не понимаю, почему вы даже хотите иметь этот метод?

Вместо вызова var x = GetInstance<Foo>();, вы можете просто сделать var x = new Foo(); так Foo должны иметь конструктор без параметров, если вы хотите вызвать GetInstance<T>() с Foo в качестве параметра типа (или я что-то отсутствует?).

+0

Спасибо Jaaco +1, но почему Where T: new()? – BreakHead

+0

Быстрее и тождественно - CreateInstance может выполнять динамические параметры, но когда вы их не пропускаете, cna не делает этого, тогда новые работы лучше, чем createisntance - более сильное ожидание. – TomTom

+0

@BreakHead Это Яакко :) Если бы не было ограничения «new()», вы бы не смогли сделать «новый T()». Все это ограничение состоит в том, что он гарантирует, что «T» имеет конструктор без параметров. – flai

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

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