How to Declare a List<> of Enums in C#
我需要声明一个枚举列表,但我不知道如何正确地进行。
这是迄今为止我的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 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的构造函数需要player支持的语言列表。我想把可能的语言定义为枚举。现在我不知道如何在构造调用中声明这样的列表。
我知道我可以这样做:
1 2 3 4 |
但我想写的代码尽可能圆滑…顺便说一句:如果你看到其他不好的做法,告诉我。我正在努力改进。
如果不对
1 2 3 4 |
如果您愿意更改,
1 2 | NewGame.AddPlayer(new FoolMeLib.Player("Player A", FoolMeLib.Languages.Ger, FoolMeLib.Languages.Eng)); |
或者,如果允许枚举为
1 2 | NewGame.AddPlayer(new FoolMeLib.Player("Player A", FoolMeLib.Languages.Ger | FoolMeLib.Languages.Eng)); |
(但他们需要2n范围内的特定数字)
已发布集合初始值设定项的好选项。
另一种选择可能是使用标志:
1 2 3 4 5 6 7 8 | [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); |
根据您计划如何处理语言,这可能是一个好的或坏的设计。
我认为你的标题和问题误导了你,你可能真的在找
例如,如果重新定义构造函数,例如:
1 2 3 4 | public Player(string ID, params Languages[] languages) { Languages = languages.ToList(); } |
可以将支持的语言作为参数列表传递
1 |
如果不接受修改类播放器,只需这样调用构造函数:
如果接受修改类播放器,请使用参数并将语言类型更改为语言[]。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 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); } } |
你的问题:
如何使用语言列表调用构造函数?
最圆滑的方式:
例如,你有一个会说英语和德语的玩家:
1 |