簡體   English   中英

C#中有沒有類似Java AutoValue的東西?

[英]Is there anything similar to Java AutoValue in C#?

在從事 Java 項目一段時間后又回到 C# 之后,我發現自己真的很想念 AutoValue。 具體來說,我希望能夠:

  • 使用最少的樣板生成不可變值 class。
  • 為我自動處理平等和 hash 代碼之類的事情。
  • 理想情況下,讓它自動生成一個構建器以允許流暢的構造和任意驗證,例如“如果你給參數 A,你也必須給 B”。
  • 同樣,toBuilder() 樣式的 function 在進行一些修改的同時對現有實例進行深層復制。

使用 AutoValue,所有這些都非常容易。 有沒有類似的? 當然,我可以自己實現所有這些功能,但它有很多樣板,使其更難維護且更容易出錯。

根據您的描述,您似乎需要等到C#9 記錄類型才能獲得您對 java 的AutoValues的描述,即在 C#9 中,您應該能夠聲明:

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

然后你會得到:

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

  • 將您的 class 屬性聲明為僅獲取
  • 通過構造函數初始化所有屬性
  • 創建您自己的 static 工廠/構建器方法
  • 使用IDE中的代碼生成工具來生成相等成員

順便說一句,如果您剛剛從 Java 切換到 C#,您可能不知道structs是瑣碎的“記錄”的值類型, 來自文檔:

結構最適合非常小的數據結構,這些數據結構主要包含在創建結構后不打算修改的數據。

盡管結構確實具有值相等的默認實現,但這可能是不可接受的,因為它只是hashcode中包含的第一個字段,並且如果要使用==則需要提供operator ==的實現價值平等。

也就是說, 必須仔細考慮結構的用例,並且在 arrays 中使用時,通常應僅用於瑣碎的不可變記錄或出於性能原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM