【问题标题】:Use an object sent in as a generic type使用作为泛型类型发送的对象
【发布时间】:2015-10-18 08:12:57
【问题描述】:

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

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 变量,上面的注释行都不起作用,我会收到一条错误消息

参数 System.Type 不可分配给参数类型 Systems.Collections.Generic.IEnumerable&lt;T&gt;

如何获取WriteString方法中使用的对象?

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

【问题讨论】:

    标签: c# .net generics filehelpers


    【解决方案1】:

    错误信息很清楚。 The method signature accepts a IEnumerable&lt;T&gt;,不是 Type 对象。你需要通过IEnumerable&lt;T&gt;instance

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

    编辑:

    在查看FileEngineHelper 类之后,我将假设您使用了非泛型FileEngineHelper 构造函数,它接受Type 对象而不是泛型类构造函数。当您使用非泛型类构造函数时,WriteString 将始终采用 IEnumerable&lt;object&gt;,而不是 IEnumerable&lt;T&gt;

    移到通用版本,这可行:

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

    【讨论】:

    • 但是,再次查看 OP 的代码。似乎 OP 并没有尝试给出obj,而是使用反射创建的实例,其中整个T 类型有一个接受整个IEnumerable&lt;T&gt; 的参数构造函数...
    • @MatíasFidemraizer 我认为 OP 很困惑 :) 这正是我的观点。
    • 好吧,我已经放弃了我的答案,因为你的答案似乎是正确的。顺便说一句,我不明白为什么 OP 没有尝试直接将objWriteString 看看会发生什么......
    • 有时我觉得人们认为写一行代码可能会产生原子爆炸会吞噬宇宙,而按下“构建解决方案”或“构建”选项只会给你提示移动并避免浪费时间问无用的问题:D
    • @netniV OP 有一个类泛型参数T 一个方法参数泛型参数。这是造成问题的原因
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-17
    • 1970-01-01
    相关资源
    最近更新 更多