2012-05-23 70 views
3

所以我試圖設置list<>對象中的list<>字段。 這個列表可以是任何類型,因此使用泛型。通用列表替換

我得到一個編譯時錯誤''不能將System.Collections.Generic.List<object>表達式轉換爲System.Collections.Generic.IEnumerable<T>' 有沒有辦法使這項工作?

private void MyGenericMethod<T>(FieldInfo field) 
{ 
    field.SetValue(obj, new List<T>(newObjectList)); // new List<T> allObjects.ConvertAll<IEnumerable>) ??? 
} 
+2

什麼是'newObjectList'? –

+0

它是我想要投入該領域的新List,在這種情況下,它是全球性的。 – user1229895

+1

如果它是全局類,那麼它不是正確的類型 - 它不能是'List '類型,因爲'T'類型參數只存在於此方法的定義和主體內。 –

回答

2

我與達米安。這個問題必須newObjectList,因爲有路過泛型類型的名單給setValue沒有問題的,因爲它如果你創建一個新的列表,並與其他集合填充它接受Object類型

public void SetValue(
Object obj, 
Object value 
) 

的兩個參數,它會問一個IEnumerable的,所以你應該嘗試像

field.SetValue(obj, new List<T>(newObjectList as IEnumerable<T>)); 

至少,在編譯時,它不會引發任何錯誤

+0

我忘了'as'關鍵字。它解決了編譯問題,但我認爲它存在問題,因爲對象需要有許多特殊情況才能適用於其他類型。但它現在編譯,謝謝! – user1229895