2013-07-03 53 views
2

我有一個函數WriteList將列表保存到文件中。該函數具有參數List<Object>,所以我可以傳遞不同類型的列表作爲參數。將我自己的類傳遞給對象

public void WriteList(List<object> input, string ListName) 
    { 
     WriteToFile("List - " + ListName); 
     foreach (object temp in input) 
     { 
      WriteToFile(temp.ToString()); 
     } 
    } 

當調用從我的代碼這個功能我要傳遞的參數List<Database>其中Database是我自己做的類。我得到以下錯誤:

cannot convert from 'System.Collections.Generic.List -Database-' to 'System.Collections.Generic.List-object-'

所以我的問題是,如何我自己的類轉換爲對象,然後通過一個列表,我的功能。

回答

14

List<T>不是covariant。使用IEnumerable<T>代替:

public void WriteList(IEnumerable<object> input, string ListName) 
{ 
    WriteToFile("List - " + ListName); 
    foreach (object temp in input) 
    { 
     WriteToFile(temp.ToString()); 
    } 
} 

或者使該方法一般:

public void WriteList<T>(List<T> input, string ListName) 
{ 
    WriteToFile("List - " + ListName); 
    foreach (T temp in input) 
    { 
     WriteToFile(temp.ToString()); 
    } 
} 

IMO:第二個的爲佳,因爲值類型使用時沒有裝箱/拆箱。

+0

謝謝!奇蹟般有效 – Robin

1

List<Database>不澆注到List<object>。一種方法是將您的List<Database>類聲明爲List<Object>,注意:您仍然可以將數據庫對象添加到它。

2

您可以使用LINQ:

List<object> objectList = myList.Cast<object>().ToList(); 
this.WriteList(objectList, "Some Name") 

不要忘了導入LINQ:

using System.Linq;