0

特定のタイプのオブジェクトのプロパティのリストを取得したいので、この静的メソッドを作成してジョブを実行しました。

例: クラス A には 3 つの bool プロパティがあり、GetPropertiesList< bool>(aInstance) を呼び出します。bool を返すプロパティをすべて含むリストを返します。

それは大丈夫ですか、それともここで車輪を再発明していますか?

    public static List<T> GetPropertiesList<T>(object obj)
    {
        var propList = new List<T>();
        PropertyInfo[] properties = obj.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);
        //search
        foreach (PropertyInfo prop in properties)
        {
            if (prop.PropertyType != typeof(T)) { continue; }

            else
            {
                //Add to list
                var foundProp = (T)prop.GetValue(obj, null);
                propList.Add(foundProp);
            }
        }
        return propList;
    }
4

2 に答える 2

2

LINQ を使用してクエリを短縮できます。たとえば、次のようになります。

obj.GetType()
   .GetProperties(BindingFlags.Public | BindingFlags.Instance)
   .Where(p=>typeof(T).IsAssignableFrom(p.PropertyType))
   .Select(p=>(T)p.GetValue(obj,null))
   .ToList();

アップデート

また、 MemberFilterデリゲートを受け入れるType.FindMembersメソッドをチェックして、返されるメンバーをフィルター処理することもできますが、それほど単純でも高速でもないと思います。

于 2013-10-03T14:51:19.437 に答える