Я хочу создать независимый от типа Конвертер для подсчета элементов в коллекции с общим типом.IValueConverter - Кастинг общих коллекций
public class CollectionCountConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return ((SomeCastingType)value).Count;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException(); // not used for oneway binding
}
}
ценность в этом случае представляет собой коллекцию любого типа. Проблема заключается в том, чтобы найти правильный тип литья и бросить объект. То, что я хочу иметь, это что-то вроде
Type t = value.GetType();
ICollection<t> c = (ICollection<t>) value;
int count = c.Count();
но это не работает. Я также попытался использовать Object как общий тип, но затем я получаю InvalidCastException. Есть ли элегантный способ сделать это?
Что такое * актуальный * тип здесь? Большинство коллекций также реализуют неорганический интерфейс ICollection, что упрощает ... вы могли бы использовать это вместо этого? –
Вы также можете использовать 'IEnumerable
Фактический Тип списка: ** Список ** и он работает с литьем интерфейса ICollection! Извините, я новичок в C# ... –
user2476294