Type.GetFiled()やType.GetProperty()で取得したFildTypeやPropertyTypeからEnumの名前と値をちょっとだけスマートに列挙する方法
昨日アップした「C#のリフレクションを使ってC#クラスからC構造体を生成する」でEnumの値も取り出すようにしたいねとちょっと書きました。
Type.GetFiled()やType.GetProperty()の戻り値の(他は調べてないので知りませんが)FildTypeやPropertyTypeにはGetEnumValues()てのがあって値も簡単に取り出せます。
var enumNames = new Dictionary<string, string[]>(); // enumの中身を入れとく
var prop = type.GetField(memberInfo.Name);
var names = new List<string>();
foreach (var value in prop.FieldType.GetEnumValues())
{
names.Add(string.Format("{0} = {1}", value.ToString(), (int)value));
}
enumNames[prop.FieldType.Name] = names.ToArray();
valueがEnumなのでToString()すれば名前も取り出せて一石二鳥。
ただなんとなくforeachに一行がアレ。LINQ出来たよね?と調べたら、ArrayはLINQ出来ないっぽい。
なのでこうしてみました。
var enumNames = new Dictionary<string, string[]>(); // enumの中身を入れとく
var prop = type.GetField(memberInfo.Name);
enumNames[prop.FieldType.Name] = prop.FieldType.GetEnumNames().Select(name =>
string.Format("{0} = {1}", name, (int)Enum.Parse(prop.FieldType, name))
).ToArray();
GetEnumNames()で取得したEnumの列挙名と、Enumのタイプ(prop.FieldType)から値を取り出してます。
最初のやつのvar namesを空で作ってforeachで回して最後に入れる、みたいなちょっと回りくどい方法をしなくてよくなってなんとなくすっきり。
Author And Source
この問題について(Type.GetFiled()やType.GetProperty()で取得したFildTypeやPropertyTypeからEnumの名前と値をちょっとだけスマートに列挙する方法), 我々は、より多くの情報をここで見つけました https://qiita.com/marksard/items/3414fadf943c0cd57eac著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .