У меня есть список объектов, тип которых я не могу знать во время компиляции.
Мне нужно идентифицировать любой из этих объектов, где существует свойство 'Count', и получить значение, еслиэто так.
Этот код работает для простых типов коллекций:
PropertyInfo countProperty = objectValue.GetType().GetProperty("Count");
if (countProperty != null)
{
int count = (int)countProperty.GetValue(objectValue, null);
}
Проблема в том, что это не работает для универсальных типов, таких как IDictionary<TKey,TValue>
.В этих случаях значение countProperty возвращается как ноль, даже если свойство экземпляра существует в экземпляре объекта.
Все, что я хочу сделать, - это определить любой объект на основе коллекции / словаря и найти его размер, если он есть.
Редактировать: по запросу, вот полный список кода, который не работает
private static void GetCacheCollectionValues(ref CacheItemInfo item, object cacheItemValue)
{
try
{
//look for a count property using reflection
PropertyInfo countProperty = cacheItemValue.GetType().GetProperty("Count");
if (countProperty != null)
{
int count = (int)countProperty.GetValue(cacheItemValue, null);
item.Count = count;
}
else
{
//poke around for a 'values' property
PropertyInfo valuesProperty = cacheItemValue.GetType().GetProperty("Values");
int valuesCount = -1;
if (valuesProperty != null)
{
object values = valuesProperty.GetValue(cacheItemValue, null);
if (values != null)
{
PropertyInfo valuesCountProperty = values.GetType().GetProperty("Count");
if (countProperty != null)
{
valuesCount = (int)valuesCountProperty.GetValue(cacheItemValue, null);
}
}
}
if (valuesCount > -1)
item.Count = valuesCount;
else
item.Count = -1;
}
}
catch (Exception ex)
{
item.Count = -1;
item.Message = "Exception on 'Count':" + ex.Message;
}
}
Это работает нормально для простых коллекций, но не для объекта, созданного из класса, который у меня есть, которыйпроисходит от Dictionary<TKey,TValue>
.Т.е.
CustomClass :
Dictionary<TKey,TValue>
CacheItemInfo - это простой класс, который содержит свойства для элементов кэша - т. Е. Ключ, число, тип, дата истечения времени