[英]How to Declare a List<> of Enums in C#
我需要聲明一個枚舉列表,我無法弄清楚如何正確地做到這一點。
到目前為止這是我的代碼:
public enum Languages
{
Ger,Eng,Fra,Ita,Rus
}
public class Player
{
public string ID { get; private set; }
private List<Languages> Languages;
public Player(string ID, List<Languages> LangList)
{
this.ID = ID;
this.Languages = LangList;
}
}
class Program
{
static void Main(string[] args)
{
Player PlayerA = new Player("Player A", **[Problem is here]**);
}
}
正如您所看到的,Player的構造函數需要播放器支持的語言列表。 我想將可能的語言定義為枚舉。 現在我不知道如何在構造調用中聲明這樣的列表。
我知道我可以這樣做:
List<FoolMeLib.Languages> pLang = new List<FoolMeLib.Languages>;
pLang.Add(FoolMeLib.Languages.Ger);
pLang.Add(FoolMeLib.Languages.Eng);
NewGame.AddPlayer(new FoolMeLib.Player("Player A", pLang));
但是我想盡可能地編寫代碼......順便說一句:如果你看到其他任何不好的做法:告訴我。 我正在努力改進。
如果沒有對Player
代碼更改,您可以:
NewGame.AddPlayer(new FoolMeLib.Player("Player A",
new List<FoolMeLib.Language> {
FoolMeLib.Languages.Ger, FoolMeLib.Languages.Eng
}));
如果你對變更開放,那么params FoolMeLib.Languages[] languages
參數將允許:
NewGame.AddPlayer(new FoolMeLib.Player("Player A",
FoolMeLib.Languages.Ger, FoolMeLib.Languages.Eng));
或者,如果您允許枚舉為[Flags]
- 只需要一個參數:
NewGame.AddPlayer(new FoolMeLib.Player("Player A",
FoolMeLib.Languages.Ger | FoolMeLib.Languages.Eng));
(但他們需要2 n范圍內的特定數字)
收集初始化程序的好選項已發布。
另一種選擇可能是使用標志:
[Flags]
public enum Languages { Ger = 1,Eng = 2,Fra = 4,Ita = 8, Rus = 16 }
// ctor
public Player(string id, Languages languages) {}
// call
new Player("Player A", Languages.Eng | Languages.Fra);
根據您計划使用的語言,這可能是一個好的或壞的設計。
我認為你的標題和問題具有誤導性,你可能真的在尋找params
。
例如,如果您重新定義構造函數,如:
public Player(string ID, params Languages[] languages)
{
Languages = languages.ToList();
}
您可以將支持的語言作為參數列表傳遞
new Player("Player A", Languages.Ger, Languages.Eng)
Enum.GetValues(typeof(Languages)).Cast<Languages>();
你的問題:
如何使用語言列表調用構造函數?
最簡潔的方式:
例如,你有一個會說英語和德語的球員:
Player PlayerA = new Player("Player A", new List<Languages>
{ Languages.Eng, Languages.Ger });
如果你不接受修改類Player,只需像這樣調用構造函數:
new Player("Player A", new List<Languages> { Languages.Ger, Languages.Eng });
如果您不接受修改類播放器,使用PARAMS和語言的語言[]的變化類型:
public enum Languages
{
Ger, Eng, Fra, Ita, Rus
}
public class Player
{
public string ID { get; private set; }
private Languages[] Languages;
public Player(string ID, params Languages[] LangList)
{
this.ID = ID;
this.Languages = LangList;
}
}
class Program
{
static void Main(string[] args)
{
Player PlayerA = new Player("Player A", Languages.Ger, Languages.Eng);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.