所以我尝试了这个:
static void Main() {
var anonymous = new { Key = "Key", Value = "Value" };
AssemblyBuilder builder = AssemblyBuilder.DefineDynamicAssembly(new AssemblyName( "MineAsm"), AssemblyBuilderAccess.Run);
ModuleBuilder modBuilder = builder.DefineDynamicModule("MineModule");
TypeBuilder mineType = modBuilder.DefineType("MineType", TypeAttributes.Public, anonymous.GetType());
Type definedType = mineType.CreateType();
Object instance = Activator.CreateInstance(definedType);
foreach (PropertyInfo property in definedType.GetProperties()) {
Console.WriteLine("{0} {1}", property.Name, property.GetValue(instance));
}
Console.ReadLine();
}
但我得到一个例外,主要是说匿名类型是密封的。真棒。我正在尝试的是能够使用标识值已更改的属性来包装匿名类型。我知道匿名类型本身不能被修改,但能够以某种方式装饰它以便编译器足够好从new { }
语句生成基本结构会很好,但随后我运行它使它更普遍有用(例如使属性像各种ORM一样可监视),但编译器仍然理解结构,因此能够提供智能感知。
这是否可行,即使不使用我目前正在关注的路径?