2015-10-18 5 views
2

У меня есть метод, который принимает обобщенный типИспользуйте объект посланный в качестве общего типа

public string GetObject<T>(IEnumerable<T> obj) 
{ 
    //Type t = typeof(T); 
    //Type t = obj.GetType(); 
    //var t = (T)Activator.CreateInstance(typeof(T),new object[] {obj }); 
    var output = fh.WriteString(t); 
    return output; 
} 

Я хочу получить доступ к этому объект получил в качестве универсального типа, так что я могу использовать его в качестве параметра для FileHelperEngineWriteString способ. Ни один из комментируемых линий выше не работают, где, если я пытаюсь использовать t переменную генерируется из одного из методов в первые три строки комментария, я получаю сообщение об ошибке говорящее

Argument System.Type is not assignable to parameter type Systems.Collections.Generic.IEnumerable<T>

Как получить объект использовать в методе WriteString?

EDIT Мои извинения, если я появился расплывчатый :) Я на самом деле хочу, чтобы значение, передаваемое в метод, который будет использоваться в FileHelperEngine. Я не уверен, что какая-либо из прокомментированных строк правильная или идеальный способ получить фактический объект, отправленный в общий тип. Все, что я хочу, это иметь возможность отправить значение, полученное в параметре, поскольку obj будет потребляться FileHelperEngine, который в основном отправляет этот IEnumerable obj методу WriteString.

ответ

3

Сообщение об ошибке довольно ясно. The method signature accepts a IEnumerable<T>, а не Type объект. Вам нужно пройти IEnumerable<T>экземпляр:

public string GetObject<T>(IEnumerable<T> obj) 
{ 
    return fh.WriteString(obj); 
} 

Edit:

Осмотрев в FileEngineHelper классе, я предполагаю, что вы использовали нон родовое FileEngineHelper конструктор, который принимает Type объект вместо родового конструктора классов. Когда вы используете конструктор не общего класса, WriteString всегда будет принимать IEnumerable<object>, а не IEnumerable<T>.

Переход к общей версии, это работает:

public class F<T> where T : class 
{ 
    private FileHelperEngine<T> fh = new FileHelperEngine<T>(); 
    public string GetObject(IEnumerable<T> obj) 
    { 
     return fh.WriteString(obj); 
    } 
} 
+0

Но опять же, см код OP еще. Похоже, что OP не пытается дать 'obj', но экземпляр, созданный с использованием отражения, где весь тип' T' имеет один конструктор параметров, принимающий все значение 'IEnumerable ' ... –

+2

@ MatíasFidemraizer Я думаю, что OP путают :) Это точно моя точка зрения. –

+0

Давайте посмотрим, что говорит OP ... Пока что ваш ответ и мой не являются неправильными ... –

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

  • Нет связанных вопросов^_^