如何将枚举值添加到列表中

发布于 2024-09-03 17:01:49 字数 503 浏览 3 评论 0原文

我有以下枚举:

public enum SymbolWejsciowy
{
     K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 
}

我想使用此枚举的值创建一个列表:

 public List<SymbolWejsciowy> symbol;

我尝试了几种不同的方法将枚举值添加到列表中:

SymbolWejsciowy symbol;  
symbol.Add(symbol = SymbolWejsciowy.K1); 

但是

symbol.Add(SymbolWejsciowy.K1); 

,我总是遇到以下异常:

未将对象引用设置为对象的实例。

我怎样才能正确地完成这个任务?

I have the following enum:

public enum SymbolWejsciowy
{
     K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 
}

I want to create a list using the values of this enum:

 public List<SymbolWejsciowy> symbol;

I have tried a couple different ways to add the enum values to the list:

SymbolWejsciowy symbol;  
symbol.Add(symbol = SymbolWejsciowy.K1); 

and

symbol.Add(SymbolWejsciowy.K1); 

However, I always get the following exception:

Object reference not set to an instance of an object.

How can I correctly accomplish this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

旧人 2024-09-10 17:01:49

正如其他答案已经指出的那样,问题是您已经声明了一个列表,但尚未构造一个列表,因此当您尝试添加元素时,您会收到 NullReferenceException

请注意,如果要构造新列表,可以使用更简洁的 集合初始值设定项语法

List<SymbolWejsciowy> symbols = new List<SymbolWejsciowy> 
{
    SymbolWejsciowy.K1,
    SymbolWejsciowy.K2,
    // ...
};

如果您想要包含所有值的列表,则可以通过调用 Enum.GetValues

List<SymbolWejsciowy> symbols = Enum.GetValues(typeof(SymbolWejsciowy))
                                    .Cast<SymbolWejsciowy>()
                                    .ToList();

As other answers have already pointed out, the problem is that you have declared a list, but you haven't constructed one so you get a NullReferenceException when you try to add elements.

Note that if you want to construct a new list you can use the more concise collection initializer syntax:

List<SymbolWejsciowy> symbols = new List<SymbolWejsciowy> 
{
    SymbolWejsciowy.K1,
    SymbolWejsciowy.K2,
    // ...
};

If you want a list containing all the values then you can get that by calling Enum.GetValues:

List<SymbolWejsciowy> symbols = Enum.GetValues(typeof(SymbolWejsciowy))
                                    .Cast<SymbolWejsciowy>()
                                    .ToList();
温柔一刀 2024-09-10 17:01:49

在您的选项 1 SymbolWejsciowy 实例和您的列表中具有相同的名称,我想这是一个拼写错误。

如果不考虑到这一点,我会说你没有创建列表的实例

symbol = new List<SymbolWejsciowy>();

In your option 1 SymbolWejsciowy instance and your list have the same name, I imagine that's a typo error.

Without taking that into account I'd say you didn't created the instance of the list

symbol = new List<SymbolWejsciowy>();
予囚 2024-09-10 17:01:49

您的代码永远不会初始化该列表。试试这个:

public List<SymbolWejsciowy> symbol = new List<SymbolWejsciowy>();
symbol.Add(SymbolWejsciowy.K1);

SymbolWejsciowy mySymbol= SymbolWejsciowy.K2;
symbol.Add(mySymbol);

Your code never initializes the list. Try this:

public List<SymbolWejsciowy> symbol = new List<SymbolWejsciowy>();
symbol.Add(SymbolWejsciowy.K1);

and

SymbolWejsciowy mySymbol= SymbolWejsciowy.K2;
symbol.Add(mySymbol);
-柠檬树下少年和吉他 2024-09-10 17:01:49

如果 Enum.GetValues() 早在 C# 2.0 中就已经针对泛型进行了更新,那肯定会很好。好吧,猜猜我们必须自己编写它:

static class EnumHelpers<T> where T : struct
{
    public class NotAnEnumException : Exception
    {
        public NotAnEnumException() : base(string.Format(@"Type ""{0}"" is not an Enum type.", typeof(T))) { }
    }

    static EnumHelpers()
    {
        if (typeof(T).BaseType != typeof(Enum)) throw new NotAnEnumException();
    }

    public static IEnumerable<T> GetValues()
    {
        return Enum.GetValues(typeof(T)).Cast<T>();
    }

    public static T Parse(string value)
    {
        return (T)Enum.Parse(typeof(T), value);
    }
}

我包含了 Parse() 因为它以同样的方式受益于泛型。

用法:(

        var symbols = EnumHelpers<SymbolWejsciowy>.GetValues().ToList();

        SymbolWejsciowy s = EnumHelpers<SymbolWejsciowy>.Parse("S2");

旁白:我也希望你可以为这类事情编写 where T : enum 。另外,where T : delegate。)

It sure would be nice if Enum.GetValues() had been updated for generics way back in C# 2.0. Well, guess we have to write it ourselves:

static class EnumHelpers<T> where T : struct
{
    public class NotAnEnumException : Exception
    {
        public NotAnEnumException() : base(string.Format(@"Type ""{0}"" is not an Enum type.", typeof(T))) { }
    }

    static EnumHelpers()
    {
        if (typeof(T).BaseType != typeof(Enum)) throw new NotAnEnumException();
    }

    public static IEnumerable<T> GetValues()
    {
        return Enum.GetValues(typeof(T)).Cast<T>();
    }

    public static T Parse(string value)
    {
        return (T)Enum.Parse(typeof(T), value);
    }
}

I included Parse() because it benefits from generics in the same way.

Usage:

        var symbols = EnumHelpers<SymbolWejsciowy>.GetValues().ToList();

        SymbolWejsciowy s = EnumHelpers<SymbolWejsciowy>.Parse("S2");

(ASIDE: I also wish you could write where T : enum for just this sort of thing. Also, where T : delegate.)

可遇━不可求 2024-09-10 17:01:49

这些答案都不适合我。

我认为大多数人只是想要一个 List 或将许多枚举组合在一起后的值列表。这应该有帮助:

    static class MyPets {

      enum Cats
      {
        Felix,
        Hairy,
        TunaBreath
      }

      enum Dogs
      {
        Fido,
        Fred,
        Butch
      }

      public static void PrintPets() {

        List<string> Pets = new List<string>();
        Pets.AddRange(Enum.GetNames(typeof(Cats)).ToList());
        Pets.AddRange(Enum.GetNames(typeof(Dogs)).ToList());

        foreach(string p in Pets){
          Console.WriteLine(p);
        }
      }

    }


// RESULT

Felix
Hairy
TunaBreath
Fido
Fred
Butch

None of these answers worked for me.

I think most people just want a List<string> or list of values after combining many enums together. This should help:

    static class MyPets {

      enum Cats
      {
        Felix,
        Hairy,
        TunaBreath
      }

      enum Dogs
      {
        Fido,
        Fred,
        Butch
      }

      public static void PrintPets() {

        List<string> Pets = new List<string>();
        Pets.AddRange(Enum.GetNames(typeof(Cats)).ToList());
        Pets.AddRange(Enum.GetNames(typeof(Dogs)).ToList());

        foreach(string p in Pets){
          Console.WriteLine(p);
        }
      }

    }


// RESULT

Felix
Hairy
TunaBreath
Fido
Fred
Butch

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文