簡體   English   中英

C#枚舉反射?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM