使用作为泛型类型

时间:2015-10-18 08:12:57

标签: c# .net generics filehelpers

我有一个接收泛型类型的方法

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;
}

我想以通用类型访问此对象,因此我可以将其用作FileHelperEngine WriteString方法的参数。如果我尝试使用前三个注释行中任一方法生成的t变量,上面的注释行都没有工作,我收到错误说

  

Argument System.Type不能分配给参数类型   Systems.Collections.Generic.IEnumerable<T>

如何在WriteString方法中使用对象?

修改 如果我显得模糊,我很抱歉:)我实际上想要传递给FileHelperEngine使用的方法的值。我不确定任何注释行是否正确或是将实际对象发送到泛型类型的理想方式。我想要的是能够将参数中收到的值发送为FileHelperEngine消耗的obj,它基本上将此IEnumerable obj发送到WriteString方法。

1 个答案:

答案 0 :(得分:3)

错误信息非常清楚。 The method signature accepts a IEnumerable<T>,而不是Type对象。您需要传递IEnumerable<T> 实例

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

修改

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);
    }
}