2016-06-08 150 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]; 
    } 
}