我需要声明一个枚举列表,我无法弄清楚如何做到这一点。
到目前为止,这是我的代码:
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));
但是我想尽可能地编写代码......顺便说一下:如果你看到其他任何不好的做法:告诉我。我正在努力改进。
答案 0 :(得分:12)
如果没有代码更改为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 范围内的特定数字)
答案 1 :(得分:2)
已发布收集初始化程序的好选项。
另一种选择可能是使用标志:
[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);
根据您打算使用的语言,这可能是一个好的或坏的设计。
答案 2 :(得分:1)
我认为您的标题和问题具有误导性,您实际上可能正在寻找params
。
例如,如果您重新定义构造函数,如:
public Player(string ID, params Languages[] languages)
{
Languages = languages.ToList();
}
您可以将支持的语言作为参数列表传递
new Player("Player A", Languages.Ger, Languages.Eng)
答案 3 :(得分:0)
Enum.GetValues(typeof(Languages)).Cast<Languages>();
答案 4 :(得分:0)
您的问题:
如何使用语言列表调用构造函数?
最简洁的方式:
E.g。你有一个能说英语和德语的球员:
Player PlayerA = new Player("Player A", new List<Languages>
{ Languages.Eng, Languages.Ger });
答案 5 :(得分:0)
如果你不接受修改类Player,只需像这样调用构造函数:
new Player("Player A", new List<Languages> { Languages.Ger, Languages.Eng });
如果执行接受修改类播放器,请使用参数并将语言类型更改为语言[]:
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);
}
}