我試圖在 C# 中模擬一個列舉,我可以通過使用一個只有靜態成員的類來使用字串值,如下所示:
internal class TruckSizeType
{
private static string? Value;
private TruckSizeType(string value) { Value = value; }
public static TruckSizeType SMALL { get { return new TruckSizeType("small"); }}
public static TruckSizeType MEDIUM { get { return new TruckSizeType("medium"); }}
public static TruckSizeType BIG { get { return new TruckSizeType("big"); }}
public static TruckSizeType GIANT { get { return new TruckSizeType("giant"); }}
public static List<TruckSizeType> ALL = new ()
{
SMALL,
MEDIUM,
BIG,
GIANT
};
public override string ToString()
{
return Value ?? "";
}
}
出于某種原因,串列成員“ALL”在運行時顯示為填充了 4 個成員(這是正確的),但所有這些都是 GIANT 型別。當我用所有 4 種不同型別初始化它們時,我無法弄清楚為什么所有成員在 ALL 串列中都是 GIANT 型別。有人明白這個嗎?我不是 ac# 程式員,但在 OOP 語言方面有相當多的經驗。也許這是一個遺漏顯而易見的例子。這是除錯器的螢屏截圖,顯示分配后串列的值:

uj5u.com熱心網友回復:
我認為您需要使用靜態欄位而不是屬性,這樣您就不會在每次參考它們時創建新實體,并且您需要一個具有私有值的實際類來保存字串:
internal class TruckSizeType {
private readonly string Value;
private TruckSizeType(string value) => Value = value;
public static readonly TruckSizeType SMALL = new TruckSizeType("small");
public static readonly TruckSizeType MEDIUM = new TruckSizeType("medium");
public static readonly TruckSizeType BIG = new TruckSizeType("big");
public static readonly TruckSizeType GIANT = new TruckSizeType("giant");
public static readonly ReadOnlyCollection<TruckSizeType> ALL = new List<TruckSizeType>() { SMALL, MEDIUM, BIG, GIANT }.AsReadOnly();
public override string ToString() => Value ?? "";
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/517615.html
標籤:C#列表
下一篇:如何在二分查找中設定中間值?
