使用作为泛型类型发送进来的对象

本文关键字:对象 泛型类型 | 更新日期: 2023-09-27 18:18:08

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

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变量,我得到一个错误说

参数系统。Type不能赋值给参数类型Systems.Collections.Generic.IEnumerable<T>

我如何得到要在WriteString方法中使用的对象?

编辑如果我显得模糊,我的道歉:)我实际上希望传递给方法的值由FileHelperEngine使用。我不确定是否有任何注释行是正确的,或者是将实际对象发送到泛型类型的理想方法。我想要的只是能够将在参数中接收到的值作为FileHelperEngine所使用的obj发送,这基本上是将这个IEnumerable obj发送给WriteString方法。

使用作为泛型类型发送进来的对象

错误消息非常清楚。方法签名接受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);
    }
}