2015-10-18 61 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方法?

编辑 我很抱歉,如果我看起来模糊:)我实际上想要传递给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); 
} 

编辑:

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是什么...现在,你的答案和我的答案都是不正确的...... –