2014-10-05 1 views
0

Я пытаюсь написать общий конвертер для моих производных типов.Преобразование объекта в список <BaseType>, а не производный тип

значение возвращает меня производный тип i.e. List<DerivedType>.

public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
{ 
    string text = string.Empty; 
    if (value is List<BaseType>) 
    { 
     var v = value as List<BaseType>; 
     var x = v.Select(c => c.Name); 
     text = string.Join(", ", x); 
    } 

    return text; 
} 

DerivedType, BaseType are placeholders for classes 

value = List<DerivedType> 
targetType = string 
parameter = null 
+2

где «BaseType» (или это просто какой-то заполнитель?) Также как об использовании переданного аргумента 'targetType'? –

+0

BaseType является заполнителем для родительских дочерних классов. Я хочу создать разделенные запятыми значения на основе свойства Parent для любого производного типа, переданного –

ответ

2

здесь вы идете

public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     string text = string.Empty; 
     IEnumerable source = value as IEnumerable; 
     if (source != null) 
     { 
      var v = source.OfType<BaseType>(); 
      var x = v.Select(c => c.Name); 
      text = string.Join(", ", x); 
     } 

     return text; 
    } 

, используя этот подход, мы просто проверить, если значение представляет собой набор IEnumerable, а затем будет пытаться восстановить все объекты BaseType, остальное остается тем же.

другой более простой подход, благодаря Сергею Брунов

IEnumerable<BaseType> source = value as IEnumerable<BaseType>; 
    if (source != null) 
    { 
     var x = source.Select(c => c.Name); 
     text = string.Join(", ", x); 
    } 

другому подходу может включать в себя проверку общего типа для проверки тех же.

+0

'var source = value как IEnumerable ;' кажется, достаточно, не используя 'OfType()'. –

Смежные вопросы