将我自己的类传递给对象

时间:2013-07-03 11:28:07

标签: c# .net winforms object

我有一个函数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,然后将列表传递给我的函数。

3 个答案:

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

答案 1 :(得分:2)

您可以使用linq:

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

不要忘记导入linq:

using System.Linq;

答案 2 :(得分:1)

List<Database>无法投放到List<object>。一种方法是将您的List<Database>课程声明为List<Object>,请注意:您仍然可以向其添加数据库对象。