概要
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());
}