如何通过类的数组对象实例访问枚举
本文关键字:实例 访问 枚举 对象 数组 何通过 | 更新日期: 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();
}
}
}