-4

我在这里阅读了如何在 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?

谢谢你。

4

1 回答 1

1

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

我认为您正在寻找一种对象类型,因此如果该属性是一个字符串,那么您将使用

typeof(string)

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

typeof(dynamic)

这将具有相同的效果

typeof(object)

但是动态不是类型安全的,因此任何不存在的属性在运行时才会被拾取,两者都有点像说“把任何东西放在这里”。最安全和最好的做法是为匿名类型创建一个类。

于 2015-10-30T08:51:12.823 回答