首页 > 解决方案 > C#中是否有类似于Java AutoValue的东西?

问题描述

在从事 Java 项目一段时间后又回到 C#,我发现自己真的很想念 AutoValue。具体来说,我希望能够:

使用 AutoValue,所有这些都将变得非常容易。有没有类似的?当然,我可以自己实现所有这些功能,但它有很多样板,使其更难维护且更容易出错。

标签: javac#auto-value

解决方案


根据您的描述,您似乎需要等到C#9 记录类型才能获得您对 java 的描述AutoValues,即在 C#9 中,您应该能够声明:

public data class Person
{
    public string FirstName { get; init; }
    public string LastName { get; init; }
}

然后你会得到:

在此期间(C#8 和更早版本),您需要手动完成其中的一些操作,即

  • 将您的类属性声明为仅获取
  • 通过构造函数初始化所有属性
  • 创建您自己的静态工厂/构建器方法
  • 使用IDE中的代码生成工具来生成相等成员

顺便说一句,如果您刚刚从 Java 切换到 C#,您可能不知道structs琐碎的“记录”的值类型,来自文档:

结构最适合非常小的数据结构,这些数据结构主要包含在创建结构后不打算修改的数据。

尽管结构确实具有值相等的默认实现,但这可能是不可接受的,因为它只是hashcode中包含的第一个字段,并且如果要用于值相等,则需要提供operator ====的实现.

也就是说,必须仔细考虑结构的用例,并且通常应仅用于琐碎的不可变记录或在数组中使用时出于性能原因。


推荐阅读