[英]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.