2015-12-02 5 views
0

Мне интересно, можно ли мне получить доступ к перечислению, объявленному в классе через объект массива класса ... до сих пор, m не удалось получить к нему доступ. Вот иллюстрация.Как получить доступ к перечислению через экземпляр объекта массива класса

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

ответ

2

Что вам нужно сделать, это иметь экземпляр - само по себе - или, вернее, «значение» вашего 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 случая.

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 
+0

Что вернуть $ «***» означает в C# –

+1

Это называется строка интерполяции по протоколу HTTPS:. // MSDN .microsoft.com/EN-US/библиотека /dn961160.aspx –

+0

О, разве мы не можем использовать его до VS2015? Я пробовал .net 4.0 VS2013, но не компилирую. –

0

Учитывая то, как вы написали свой пол, перечисление, когда новый экземпляр MyClass создается свойство Пол (я должен был добавить это) будет автоматически установлен мужской.

Итак, если то, что вы пытаетесь сделать, это инициализировать CS один раз и только один раз (в противном случае вы получите переполнение стека, сделать CS статические и использовать статический конструктор.

EDIT

. не было 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(); 
     } 
    } 
} 
+0

Для записи я бы не стал его кодировать таким образом для всего, над чем я работал над собой. Это просто дать ответ на ОП наиболее целесообразным способом. –

Смежные вопросы