所以我尝试了这个:
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 一样可监控),但编译器仍然理解结构,因此能够提供智能感知。
即使不使用我目前遵循的路径,这是否可能?