繁体   English   中英

对象到字典,编译器生成的函数

[英]Object-To-Dictionary, compiler-generated function

我对C#编译器的最新功能有些不了解,因此我必须提出以下问题:

有没有办法获得编译器生成的成员函数,该成员函数对类的所有已定义和继承的属性进行迭代(在编译时,而不是在运行时通过反射),并返回名称-值字典?

class Foo
{
    public string A { get; set; }
    public string B { get; set; }
    public string C { get; set; }
    public string D { get; set; }

    [Microsoft.CSharp._SomethingSomething_ToDictionaryConverter]
    // Compiler-generated function:
    // return new Dictionary<string, object>()
    // {
    //     { nameof(Foo.A), this.A },
    //     { nameof(Foo.B), this.B },
    //     { nameof(Foo.C), this.C },
    //     { nameof(Foo.D), this.D },
    // }
    public Dictionary<string, object> ToDict();
}

// Then,
var foo = new Foo();
var d = foo.ToDict();    // yay!

删除依赖于在编译时整体上已知的状态的样板代码的愿望不是唯一的。 这实际上就是Fody库的目的。 (相对而言)它简化了在构建过程中操纵最终生成的IL的能力。

在查看已经建立的库列表时,我注意到ToString执行的操作与您想要的相似。 具体来说,它要求使用者使用[ToString]属性来装饰一个类,并且“ weaver”将遍历所有公共属性,重写ToString()方法并使其发出自定义字符串。 在您的示例中,您将创建类似[ToDict]属性的东西,然后创建一个编织器,该编织器将遍历所有公共属性,定义新的ToDict()方法并返回字典。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM