gpt4 book ai didi

c# - 静态字段的奇怪行为

转载 作者:行者123 更新时间:2023-11-30 22:42:30 24 4
gpt4 key购买 nike

我正在尝试让自定义枚举类正常工作,这应该使我能够创建具有用户友好标识符和任意关联值的枚举。到目前为止一切顺利:

public class EnumBase<T, E>
where E : class
{
private static readonly List<E> list = new List<E>();

private string text;
private T value;

public string Text { get { return text; } }
public T Value { get { return value; } }

public EnumBase(string text, T value)
{
this.text = text;
this.value = value;
list.Add(this as E);
}

protected static IEnumerable<E> ItemList
{
get { return list; }
}
}

public class Zahlungsart : EnumBase<int, Zahlungsart>
{
public static readonly Zahlungsart Erlagsschein = new Zahlungsart("Erlagsschein", 0);
public static readonly Zahlungsart Lastschrift = new Zahlungsart("Lastschrift", 1);

private Zahlungsart(string text, int value) : base(text, value) { }
public static new IEnumerable<Zahlungsart> ItemList { get { return EnumBase<int, Zahlungsart>.ItemList; } }
}

现在我的问题是:

Console.WriteLine(Zahlungsart.ItemList.Count());

下面的语句给了我 0,而不是 2。我认为问题是由于 beforefieldinit。我可以通过直接调用特定枚举的某些方法来解决这个问题,这会强制加载静态字段,但我认为这不是最佳解决方案。

提示:请不要在这里为枚举提出某种 [UserfriendlyName()] 属性,我已经知道了。

编辑谢谢,汉斯。我自己的代码中确实有错字,调用了错误的泛型特化。

现在我的问题是,我能否在每个子类中摆脱对 ItemList 的重新定义,但似乎这是初始化静态字段所必需的。

最佳答案

如何使用“静态构造函数”??

public class Zahlungsart : EnumBase<int, Zahlungsart>
{
public static readonly Zahlungsart Erlagsschein;
public static readonly Zahlungsart Lastschrift;

static Zahlungsart()
{
Erlagsschein = new Zahlungsart("Erlagsschein", 0);
Lastschrift = new Zahlungsart("Lastschrift", 1);
}

private Zahlungsart(string text, int value) : base(text, value) { }
public static new IEnumerable<Zahlungsart> ItemList { get { return EnumBase<int, Zahlungsart>.ItemList; } }
}

关于c# - 静态字段的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4390328/

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