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());
}
//}
}整个代码就是这样
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());
}
//}
}整个代码就是这样
foreach (Type t in types)
然后
var item = Activator.CreateInstance(t) as T;
return item;
遍历到第一个元素就return了。types的第一个元素是你想要的吗?这种明显的逻辑问题我觉得作为一个程序员要是自己不能发现就太悲哀了。
你要这么写才行,你创建的根本不是T类型的对象,怎么可以转换为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);
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace ConsoleApplication1
{
public interface Run
{
void Write();
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace ConsoleApplication1
{
public class RunTo
{
public void Write()
{
Console.WriteLine(""123"");
}
}
}"; 这是我要编译的code
只有你自己才知道,这里面的t是什么,Create出来的objcet是什么类型。
Activator.CreateInstance(t)
@wddw1986 可以告诉我你的联系方式 反射这块我不是很懂
Activator.CreateInstance(t) as T
或者你的t 根本就不是T的类型