[英]C# enum reflection?
創建具有命令分組功能的機器人以進行組織和格式化。
我當時想用每個組選項創建一個公共枚舉,例如
public enum CommandGroups
{
Information,
Admin,
Owner,
etc
}
然后在命令創建中使用公共對象定義它
public Command SetGroup(CommandGroups group)
{
this.group = group;
return this;
}
因此,當發出幫助命令時,將在格式化后返回類似這樣的內容
Information: about, stats
Admin: kick, ban, mute
Owner: reload
我認為的問題是,您是否可以在這樣的枚舉上使用反射? 還是應該嘗試其他方式?
枚舉有一個toString方法,使用它應該沒問題
https://msdn.microsoft.com/zh-CN/library/16c1xs4z(v=vs.110).aspx
看起來您需要這樣的東西才能生成枚舉列表
foreach (string cmdGroup in Enum.GetNames(typeof(CommandGroups)))
{
// ... print(cmdGroup);
}
那會讓你
信息
管理員
所有者
是否有理由不只是定義對象並通過帶有名稱的類指定正在使用的組?
您的好處是設計簡單易行,而且可以存儲命令而無需任何其他操作
public class Command
{
public int Id {get;set;}
public string Name {get;set;}
}
public class CommandGroup
{
public string Name {get;set;}
public IEnumerable<Commands> Commands {get;set;}
}
public class CommandGroupLookup
{
public CommandGroupLookup()
{
//initialize from database or wherever
}
private readonly Dictionary<string,CommandGroup> _commandGroup;
public Command LookupGroup( string lookupCommandGroup )
{
return _commandGroup[lookupCommandGroup];
}
}
考慮將所有Command對象存儲在Dictionary<CommandGroups, List<Command>>
。 然后,假設您的Command類具有一個Name
屬性,該屬性顯示諸如“ about”,“ kick”,“ ban”等動詞,則可以執行以下操作:
// assuming "groups" is the dictionary:
foreach (var kvp in groups)
{
Console.WriteLine("{0}: {1}", kvp.Key, string.Join(", ", kvp.Value.Select(x => x.Name).ToArray()));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.