创造任何类型。输入mytpe = typeof(nothing);?

时间:2015-10-30 08:48:27

标签: c# typebuilder assemblybuilder

我在这里阅读create anonymous types at runtime in c#

的方法
AssemblyBuilder dynamicAssembly =
AppDomain.CurrentDomain.DefineDynamicAssembly(new AssemblyName("MyDynamicAssembly"),
  AssemblyBuilderAccess.Run);

string propertyName = "prp_1";
//Type propertyType = new Type();

ModuleBuilder dynamicModule = dynamicAssembly.DefineDynamicModule("MyDynamicAssemblyModule");
TypeBuilder dynamicType = dynamicModule.DefineType("MyDynamicType", TypeAttributes.Public);
PropertyBuilder property =
dynamicType.DefineProperty(
                    propertyName, 
                    System.Reflection.PropertyAttributes.None, 
                    propertyType,             // idk what to put here?
                    new[] { propertyType }    // and here ?
                );

//call this first
AddProperty(dynamicType, propertyName, propertyType );

//then we ' ll dynamic type
Type myType = dynamicType.CreateType();

被称为

的函数
public static void AddProperty(TypeBuilder typeBuilder, string propertyName, Type propertyType)

代码中有propertyType我不知道该放什么。 我可以吗

 type mytype = \\typefree?
谢谢。

1 个答案:

答案 0 :(得分:1)

编辑:这个答案对于这个问题是正确的,但问题已经改变了。

我认为你正在寻找一个对象类型,所以如果属性是一个字符串,那么你将使用

typeof(string)

代替propertyType。啊抱歉错过了匿名位。您可以尝试使用动态

typeof(dynamic)

具有相同的效果
typeof(object)

但是动态不是类型安全的,所以任何不存在的属性都不会在运行时被拾取,而且两者都有点像'把任何东西放在这里'。最安全和最好的事情是为匿名类型创建一个类。