我想知道我是否可以通过类的数组对象访问在类中声明的枚举...到目前为止,我无法访问它。这是一个例子。
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
}
}
答案 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();
}
}
}