gpt4 book ai didi

c# - Object-To-Dictionary,编译器生成的函数

转载 作者:行者123 更新时间:2023-11-30 21:39:01 25 4
gpt4 key购买 nike

我有点不了解 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 library执行类似于您想要的操作。具体来说,它要求消费者用[ToString] 属性装饰一个类,并且“编织器”将遍历所有公共(public)属性,重写ToString() 方法并让它发出自定义字符串。在您的示例中,您将创建类似 [ToDict] 属性的内容,然后创建一个遍历所有公共(public)属性的编织器,定义一个新的 ToDict() 方法, 并返回一个字典。

关于c# - Object-To-Dictionary,编译器生成的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45445876/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com