2016-06-08 110 views
0

使用命令分组功能为组织和格式创建bot。C#枚举反射?

我想与像

public enum CommandGroups 
{ 
    Information, 
    Admin, 
    Owner, 
    etc 
} 

然后发出help命令时,命令生成内有一个公共对象定义它

public Command SetGroup(CommandGroups group) 
{ 
    this.group = group; 
    return this; 
} 

所以,东西各组选项创建一个公共枚举像这样会返回,在某些格式化后授予

Information: about, stats 
Admin: kick, ban, mute 
Owner: reload 

该问题我认为是,你甚至可以使用像这样的枚举的反射吗? 或者我应该尝试一种不同的方式?

回答

0

考虑存储就像一个Dictionary<CommandGroups, List<Command>>所有Command对象。然后,假设您的Command类上有一个Name属性,公开动词如“约”,“踢”,“禁令”,等等,你可以这样做:


// 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())); 
} 
+0

这是我最终使用的一般想法。 – TehPirate

0

看起来你需要像这样产生枚举

foreach (string cmdGroup in Enum.GetNames(typeof(CommandGroups))) 
{ 
    // ... print(cmdGroup); 
} 

的清单,并让你

被罚款

信息

A DMIN

所有者

+0

我能那么做其他的foreach cmdGroup检索每个枚举下的每个变量? – TehPirate

+0

应该把可能的重复 – konkked

+0

删除它,不知道它是否重要。 –

0

任何理由不只是定义对象,并指定使用的是通过与名称的类组?

你必须有更简单,更容易按照设计的好处,你可以存储的命令,没有任何额外的魔法

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]; 
    } 
}