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

时间:2015-12-02 00:56:15

标签: c# arrays class oop enums

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

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
    }
}

3 个答案:

答案 0 :(得分:2)

您需要做的是拥有一个实例 - 本身 - 或者更确切地说,&#39;价值&#39;您班级中的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案例命名。

答案 1 :(得分:0)

你需要在这里分解你的一些东西。当这个无效时,你正试图在类中做循环。您可以将以下代码复制并粘贴到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

答案 2 :(得分:0)

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

所以,如果你要做的是初始化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();
        }
    }
}