2

所以我尝试了这个:

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 一样可监控),但编译器仍然理解结构,因此能够提供智能感知。

即使不使用我目前遵循的路径,这是否可能?

4

0 回答 0