如何通过类的数组对象实例访问枚举

本文关键字:实例 访问 枚举 对象 数组 何通过 | 更新日期: 2023-09-27 18:25:19

我想知道是否可以通过类的数组对象访问在类内声明的枚举。。。到目前为止,我无法访问它。这是一个插图。

class MyClass
{
    public enum gender { male, female };
    MyClass[] cs = new MyClass[];
    for (int i = 1; i < max; i++)
    {
        cs[i].gender = male; //I cant do this
    }
}

如何通过类的数组对象实例访问枚举

您需要做的是在类中拥有一个实例,或者更确切地说是Gender枚举的"值",例如MyGender。此外,不能仅在类主体中使用for循环;它需要采用一种方法:

class MyClass
{
    public Gender MyGender { get; set; }
    public enum Gender { male, female }    
    private static MyClass[] cs = new MyClass[];
    public static void DoSomething()
    {
        for (int i = 1; i < max; i++)
        {
            cs[i].MyGender = MyClass.Gender.male; 
        }
    }
}

此外,枚举应该使用Pascal大小写进行命名。

您需要在这里分解一些东西。当这无效时,您正试图在类内部执行循环。您可以将以下代码复制并粘贴到LinqPad中进行尝试。

下面是Enum的一个基本示例,Class和使用该类的位置以可重用的方式分开。

void Main()
{
    const int arraySize = 10;
    MyClass[] classes = new MyClass[arraySize];
    for (var i = 0; i < classes.Length; i++)
    {
        if ((i % 2) == 0)
        {
            classes[i] = new MyClass { Gender = Gender.Male };
        }
        else
        {
            classes[i] = new MyClass { Gender = Gender.Female };
        }
    }
    for (var i = 0; i < classes.Length; i++)
    {
        Console.WriteLine(classes[i].ToString());
    }
}
public class MyClass
{
    //Other properties here
    public Gender Gender { get; set; }
    //Constructors
    //Methods
    public override string ToString()
    {
        //Documentation: https://msdn.microsoft.com/en-us/library/dn961160.aspx
        return $"{nameof(MyClass)} has a Gender of { Gender }";
        /*
           If no C# 6 then make your return statement this.
           return string.Format("{0} has a Gender of {1}", typeof(MyClass).Name, Gender);
        */
    }
}
public enum Gender
{
    Male,
    Female
}

输出:

MyClass has a Gender of Male
MyClass has a Gender of Female
MyClass has a Gender of Male
MyClass has a Gender of Female
MyClass has a Gender of Male
MyClass has a Gender of Female
MyClass has a Gender of Male
MyClass has a Gender of Female
MyClass has a Gender of Male
MyClass has a Gender of Female

考虑到您编写性别枚举的方式,当创建MyClass的新实例时,性别属性(我必须添加此属性)将自动设置为男性。

所以,如果你想做的是初始化cs一次,并且只初始化一次(否则你会得到堆栈溢出,那么就让cs静态化,并使用静态构造函数。

编辑

在我的第一篇回答文章中声明和初始化数组时,没有使用MAX。

public class MyClass
{
    const int MAX = 10;
    public enum gender { male, female }
    public gender Gender;
    static MyClass[] cs = new MyClass[MAX];
    static MyClass()
    {
        for (int i = 0; i < MAX; i++)
        {
            cs[i] = new MyClass();
        }
    }
}