2014-10-05 51 views
0

我正在嘗試爲我的派生類型編寫一個通用轉換器。將對象轉換爲列表<BaseType>而不是派生類型

返回我派生類型,即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'的用法是什麼? – 2014-10-05 22:46:20

+0

BaseType是我父級子類的佔位符。我想根據Parent的屬性爲任何派生類型創建逗號分隔值,這些派生類型通過 – 2014-10-05 23:02:34

回答

2

在這裏,你使用這種方法,我們將簡單地驗證,如果值是一個集合IEnumerable,然後將嘗試檢索BaseType所有對象去

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; 
    } 

,其餘部分保持不變。

另一種更簡單的方法,這要歸功於謝爾蓋Brunov

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()'。 – 2014-10-05 23:04:25

相關問題