我有一个功能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-'


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

最佳答案

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

09-10 04:03
查看更多