dynamic创build一个<Type>的对象

我在我的数据库中有一个表,用来pipe理我的应用程序之间的关系。 它的本质是非常基本的 – parentType,parentId,childType,childId …都是整数。 我之前已经完成了这个设置,但是当我尝试链接6个不同的表格时,我使用了开关/表格设置。 现在我有30个表,我试图做到这一点,我希望能够做到这一点,而不必写在我的switch命令30个案例条目。

有没有一种方法可以使用string引用.Net类? 我知道这是无效的(因为我已经尝试了几个变化):

Type t = Type.GetType("WebCore.Models.Page"); object page = new t(); 

我知道如何获得一个对象的types,但我如何使用它在飞行中创build一个新的对象?

这个链接应该有帮助:

http://msdn.microsoft.com/en-us/library/system.activator.createinstance(VS.71).aspx

Activator.CreateInstance将创build指定types的实例。

你可以用这样的通用方法来包装它:

 public T GetInstance<T>(string type) { return (T)Activator.CreateInstance(Type.GetType(type)); } 

如果调用者知道该types,那么比使用Activator.CreateInstance更好,更快捷:您可以改为在指定具有默认无参数构造函数的方法上使用通用约束。

这样做是types安全的,不需要reflection。

 T CreateType<T>() where T : new() { return new T(); } 

你想使用Activator.CreateInstance

这是一个如何工作的例子:

 using System; using System.Runtime.Remoting; class Program { static void Main() { ObjectHandle o = Activator.CreateInstance("mscorlib.dll", "System.Int32"); Int32 i = (Int32)o.Unwrap(); } } 
 public static T GetInstance<T>(params object[] args) { return (T)Activator.CreateInstance(typeof(T), args); } 

这是我写的一个函数,它使用reflection来克隆types为T的logging。 这是一个非常简单的实现,我没有处理复杂的types等

  public static T Clone<T>(T original) { T newObject = (T)Activator.CreateInstance(original.GetType()); foreach (var prop in original.GetType().GetProperties()) { prop.SetValue(newObject, prop.GetValue(original)); } return newObject; } 

我希望这可以帮助别人。

阿萨夫

假设你有以下types:

 public class Counter<T> { public T Value { get; set; } } 

并具有该types的程序集限定名称,则可以按以下方式构造它:

 string typeName = typeof(Counter<>).AssemblyQualifiedName; Type t = Type.GetType(typeName); Counter<int> counter = (Counter<int>)Activator.CreateInstance( t.MakeGenericType(typeof(int))); counter.Value++; Console.WriteLine(counter.Value);