Activator.CreateInstance(t) as T   这个返回来的是NULL是怎么回事了 求解  Assembly assembly = LoadCode(code);
            if (assembly == null)
            {
                return null;
            }            //Type[] types = assembly.GetTypes();
            Type[] types = assembly.GetTypes();
            Type type = typeof(T);
            foreach (Type t in types)
            {
                //if (t.GetInterface(type.Name) == type || t.IsSubclassOf(type))
                //{
                    try
                    {
                        var item = Activator.CreateInstance(t) as T;
                        return item;
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.ToString());
                    }
                //}
            }整个代码就是这样

解决方案 »

  1.   

    逻辑就有问题,很明显这是楼主Copy过来的代码,然后发现,哎呦,怎么不对呢,然后就慌了。
      

  2.   

    自己写的就更有意思了,你知道你的代码执行过程是什么吗?
    foreach (Type t in types)
    然后
      var item = Activator.CreateInstance(t) as T;
      return item;
    遍历到第一个元素就return了。types的第一个元素是你想要的吗?这种明显的逻辑问题我觉得作为一个程序员要是自己不能发现就太悲哀了。
      

  3.   

     Activator.CreateInstance(typeof(T)) as T
    你要这么写才行,你创建的根本不是T类型的对象,怎么可以转换为T?
      

  4.   

     看好,使用指定类型的默认构造函数来创建该类型的实例。看看你的T类型的无参构造函数去吧。            //
            // 摘要:
            //     使用指定类型的默认构造函数来创建该类型的实例。
            //
            // 参数:
            //   type:
            //     要创建的对象的类型。
            //
            // 返回结果:
            //     对新创建对象的引用。
            //
            // 异常:
            //   System.ArgumentNullException:
            //     type 为 null。
            //
            //   System.ArgumentException:
            //     type 不是 RuntimeType。- 或 -type 是一个开放式泛型类型(即,System.Type.ContainsGenericParameters
            //     属性返回 true)。
            //
            //   System.NotSupportedException:
            //     type 不能为 System.Reflection.Emit.TypeBuilder。- 或 -不支持创建 System.TypedReference、System.ArgIterator、System.Void
            //     和 System.RuntimeArgumentHandle 类型或者由这些类型组成的数组。- 或 -包含 type 的程序集是动态程序集,使用
            //     System.Reflection.Emit.AssemblyBuilderAccess.Save 创建。
            //
            //   System.Reflection.TargetInvocationException:
            //     被调用的构造函数引发异常。
            //
            //   System.MethodAccessException:
            //     调用方没有调用此构造函数的权限。
            //
            //   System.MemberAccessException:
            //     无法创建抽象类的实例,或者用后期绑定机制调用了该成员。
            //
            //   System.Runtime.InteropServices.InvalidComObjectException:
            //     COM 类型不是通过 Overload:System.Type.GetTypeFromProgID 或 Overload:System.Type.GetTypeFromCLSID
            //     获得的。
            //
            //   System.MissingMethodException:
            //     找不到匹配的公共构造函数。
            //
            //   System.Runtime.InteropServices.COMException:
            //     type 是一个 COM 对象,但用于获取类型的类标识符无效,或被标识的类未注册。
            //
            //   System.TypeLoadException:
            //     type 不是有效的类型。
            [SecuritySafeCritical]
            public static object CreateInstance(Type type);
      

  5.   

    话说我T类型的东西也是没问题的。
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;namespace ConsoleApplication1
    {
        public interface Run
        {
            void Write();
        }
    }
      

  6.   

                    string code1 = @"using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;namespace ConsoleApplication1
    {
        public class RunTo
        {
            public void Write()
            {
                Console.WriteLine(""123"");
            }
        }
    }"; 这是我要编译的code
      

  7.   

    自己调试吧,没法帮你了。
    只有你自己才知道,这里面的t是什么,Create出来的objcet是什么类型。
    Activator.CreateInstance(t)
      

  8.   

    你把RunTo 类型转换成Run,不为null才怪了,这两个东西有毛关系
      

  9.   

    那应该怎么改了?
    @wddw1986  可以告诉我你的联系方式  反射这块我不是很懂
      

  10.   

    Activator.CreateInstance(typeof(T)) as T
    Activator.CreateInstance(t) as T
    或者你的t 根本就不是T的类型