2015-01-05 5 views
-2

Поэтому я должен инициировать объект из класса в основную форму, но аргументы, которые я должен добавить в конструктор, - это тип перечисления, который я сделал в этом классе.Enum type in constructor

private List<Geluidsfragment> fragmenten; 
    private enum ThemaSoorten 
    { 
     Muziek, 
     Luisterboeken, 
     Cabaretshows 
    }  

^Эта часть сейчас вне класса, как советовали.

// Constrcutors 

    public BGExperience(ThemaSoorten thema) 
    { 
     fragmenten = new List<Geluidsfragment>(); 
     this.thema = thema; 
    }  

Это поле и конструктор для поля. Ниже приведена инициатива объекта этого класса, в котором я нуждаюсь.

public GeluidsfragmentForm() 
    { 
     InitializeComponent(); 
     BGExperience bgExperience = new BGExperience("Muziek"); 
    } 

Так перегрузка должна быть типа ThemaSoorten, и он должен быть в перечислении, но в данный момент она застревает.

Кто-нибудь знает, как это решить?

+0

BGExperience bgExperience = new BGExperience (ThemaSoorten.thema1); –

+0

Вам нужно объявить enum как «public» и, вероятно, вне класса. –

+1

Возможный дубликат [Получить имя значения Enum] (http://stackoverflow.com/questions/16039037/get-the-name-of-enum-value) – ja72

ответ

2

Вы должны сделать первый ваш enum быть публичным, а затем попробовать это один:

BGExperience bgExperience = new BGExperience(BGExperience.ThemaSoorten.Muziek); 

Если вы не сделаете ваш enum быть публичным, вы не сможете получить к нему доступ извне ваш класс не говоря уже о создании экземпляра вашего класса.

Update

Как правильно Sriram уже указывал в своих комментариях, было бы лучше дизайн подход, чтобы не сделать это enum быть вложенным типом. Вы можете объявить его вне своего класса, как:

public enum ThemaSoorten 
{ 
    Muziek, 
    Luisterboeken, 
    Cabaretshows 
} 

, а затем создать новый BGExperience объект, как показано ниже:

var bgExperience = new BGExperience(ThemaSoorten.Muziek); 

Важное примечание (спасибо Selman22)

Вы можете» t объявите enum так, как вы уже это сделали. Это невозможно даже скомпилировать. Кроме того, при вводе этого сообщения вы должны принять сообщение об ошибке. Во всяком случае, правильный способом defininit enum является следующим:

public enum EnumName 
{ 
    Member1, 
    Member2, 
    Member3 
} 

На месте EnumName вы должны поставить имя вашего enum и вместо Member1, Member2 и Member3 имен элементов в вашем перечислении. Если вы хотите, это элементы имеют определенные значения, вы должны сделать это нравится:

public enum EnumName 
{ 
    Member1 = 1, 
    Member2 = 2, 
    Member3 = 3 
} 
+0

Это все еще не компилируется;) –

+0

@SriramSakthivel да перечисление является частным и выходит за рамки –

+0

@SriramSakthivel Я полагаю, вы так говорили, потому что модификатор доступа enum не был общедоступным. Верный? – Christos

-1
BGExperience bgExperience = new BGExperience(ThemaSoorten.thema1); 
0

Или, возможно, вы хотите, чтобы обеспечить строковое значение перечисления в конструктор, то вот как это будет работать:

BGExperience bgExperience = new BGExperience((BGExperience.ThemaSoorten)Enum.Parse(typeof(BGExperience.ThemaSoorten), "Muziek")); 

Обязательно сделайте enum общедоступным для этого. В противном случае вы должны указать строку в конструкторе и разделить его на значение enum внутри конструктора.