从一个匿名对象动态创建一个对象
问题描述:
使用类型生成器我很好地动态创建一个类型。是否有可能从匿名类型做到这一点?从一个匿名对象动态创建一个对象
我到目前为止;
//CreateType generates a type (so that I can set it's properties once instantiated) from an //anonymous object. I am not interested in the initial value of the properties, just the Type.
Type t = CreateType(new {Name = "Ben", Age = 23});
var myObject = Activator.CreateInstance(t);
现在是否可以使用类型“t”作为类型参数?
我的方法:
public static void DoSomething<T>() where T : new()
{
}
我想打电话给使用动态创建的“T”型这种方法。所以我可以打电话;
DoSomething<t>(); //This won't work obviously
答
是的,这是可能的。要使用类型为类型的参数,你需要使用MakeGenericType
方法:
// Of course you'll use CreateType here but this is what compiles for me :)
var anonymous = new { Value = "blah", Number = 1 };
Type anonType = anonymous.GetType();
// Get generic list type
Type listType = typeof(List<>);
Type[] typeParams = new Type[] { anonType };
Type anonListType = listType.MakeGenericType(typeParams);
// Create the list
IList anonList = (IList)Activator.CreateInstance(anonListType);
// create an instance of the anonymous type and add it
var t = Activator.CreateInstance(anonType, "meh", 2); // arguments depending on the constructor, the default anonymous type constructor just takes all properties in their declaration order
anonList.Add(t);
你的意思是你构建一个匿名类型的对象,并希望得到它的类型,以创造更多的人? – Botz3000 2013-03-08 09:50:21