LoginSignup
2
3

More than 5 years have passed since last update.

【c#】型制約を用いてEnumからDictionaryデータを作成する汎用メソッドを作ってみた

Posted at

概要

c#側でWebAPIを用いて外部サービスにアクセスしようとした時に、クエリに渡す文字列を直打ちするのはIDEのIntelligenceも聞かなく誤入力が起きると予想しました。なのでDictionaryの形にして、stringの部分にEnumを文字列にしてから小文字に変換したものを入れようと考えましたが、Enumを作るごとにDictionaryを直打ちするのは大変なので汎用的メソッドを作ってみました。

C#のバージョンはEnumの型制約がC#7.3以上でないと使えないので7.3以上を想定しています。


public enum Filter
{
    All,
    Closed,
    Members,
    Open,
    Organization,
    Public,
    Starred,
}

//Enumを作るごとにこれをコピペして中身を書き換えるのは大変
private static Dictionary<Filter, string> Filters = new Dictionary<Filter, string>
{
    {Filter.All, "all"},
    {Filter.Closed, "closed"},
    {Filter.Members, "members"},
    {Filter.Open, "open"},
    {Filter.Organization, "organization"},
    {Filter.Public, "public"},
    {Filter.Starred, "starred"},
};

実装

まずEnum.GetValuesでEnumに限定したT型の要素を取ってきます。
そのままだとobject型なのでOfTypeでT型に変換して、KeyにTを、ValueにT型を文字列にしてさらに小文字に変換したものを渡して終了です。

EnumExtend.cs

public static Dictionary<T, string> CreateEnumDictionary<T>() where T : Enum
{
    var values = Enum.GetValues(typeof(T));
    return values.OfType<T>().ToDictionary(key => key, value => value.ToString().ToLower());
}

参考

2
3
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3