2016-02-17 3 views
0

Есть ли более чистый способ получить подсчет списка, используя отражение, то это?C# Reflection Generic List Count

Boolean include = false; 

foreach (PropertyInfo item in props) 
     { 
      var pt = item.PropertyType;     

      String listType = pt.GetGenericArguments()[0].Name; 

      // Is there a better solution than this? 
      switch (listType) 
          { 
           case "jsonResult": 
            var list = v as List<jsonResult>; 

            include = list.count > 0; 
            break;         
          } 
     } 
    ) 

Я пробовал различные идеи из Google, но не имел никакой удачи.

+3

Каков текущий тип 'v'? Каковы все возможные типы, которые 'v' могут быть? У всех есть общий суперкласс, например 'ICollection'? Если это так, вы можете наложить на 'ICollection' и подсчитать этот путь, например,' ((ICollection) v) .Count'. – mellamokb

+0

@mellamokb Вероятно, вы должны ответить на этот вопрос, так как в вопросительном коде подразумевается 'v' как общий« Список <ничего неизвестного> » – grek40

+0

Спасибо @mellamokb. Это работает отлично. – user3140169

ответ

1

Я не совсем понимаю, что такое «v» переменной, но если он является объектом и, когда это коллекции вы хотите, чтобы получить его счет, вы можете сделать это следующим образом:

var count = GetCount(v); 

if (!count.HasValue) 
    continue; // Or any other code here 

include = count.Value > 0; 

Метод «GetCount»:

private static int? GetCount(object @object) 
{ 
    var collection = @object as ICollection; 
    if (collection == null) 
     return null; 

    return collection.Count; 
}