将我自己的类传递给对象
本文关键字:对象 我自己 自己的 | 更新日期: 2023-09-27 18:20:54
我有一个函数WriteList
,它将列表保存到文件中。这个函数有参数List<Object>
,所以我可以传递不同类型的Lists作为参数。
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,然后将列表传递给我的函数。
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:第二个更好,因为与值类型一起使用时没有装箱/取消装箱。
您可以使用linq:
List<object> objectList = myList.Cast<object>().ToList();
this.WriteList(objectList, "Some Name")
别忘了导入linq:
using System.Linq;
List<Database>
不可转换为List<object>
。一种方法是将List<Database>
类声明为List<Object>
,注意:您仍然可以向其中添加Database对象。