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。我收到以下错误:

无法从“System.Collections.Generic.List -Database-”转换为“System.Collections.Generic.List-object-”

所以我的问题是如何将我自己的类转换为一个对象,然后将一个列表传递给我的函数。

4

3 回答 3

14

List<T>不是协变的。改用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:第二个更好,因为与值类型一起使用时没有装箱/拆箱。

于 2013-07-03T11:30:28.900 回答
2

您可以使用 linq:

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

不要忘记导入 linq:

using System.Linq;
于 2013-07-03T11:31:42.733 回答
1

List<Database>是不可铸造的List<object>。一种方法是将您的List<Database>类声明为List<Object>,注意:您仍然可以向其中添加数据库对象。

于 2013-07-03T11:31:35.440 回答