如何创建一个接受任何类型列表的方法
How do I make a method that accepts a list of any type
如何制作一个接受任何类型列表的方法?做 List<object>
给我错误
Argument 1: cannot convert from 'System.Collections.Generic.List<VirusThing.Person>' to 'System.Collections.Generic.List' [Virus thing]
我需要更改什么才能使以下方法适用于任何类型的列表?
public static void printList(List<object> list)
{
foreach (var item in list)
{
Console.Write(item);
}
}
我看到 Java 有类似 List<?>
的东西可以接受任何类型的列表。
您可以像这样使方法通用
public static void printList<T>(List<T> list)
但这意味着您必须在编译时提供类型。
您可以使您的方法通用并添加约束以仅接受派生自 List<>
的类型
public static void printList<T>(T list) where T: List<T>
{
foreach (var item in list)
{
Console.Write(item);
}
}
或者这样使用:
public static void printList<T>(List<T> list) {
foreach (var item in list)
{
Console.Write(item);
}
}
最好用泛型
public static void printList<T>(IEnumerable<T> list)
{
foreach (var item in list)
{
Console.WriteLine(item.ToString());
}
}
但是如果你使用复杂的 class,比如 Person,你将不得不覆盖 ToString
class Person
{
public string Name { get; set; }
public int Age { get; set; }
public override string ToString()
{
return "Person: " + Name + " " + Age;
}
}
或者您可以使用使用反射的更复杂的代码
public static void printList<T>(IEnumerable<T> list)
{
foreach (var item in list)
{
if (item.GetType().IsPrimitive || item.GetType().Name=="String") Console.WriteLine(item.ToString());Console.WriteLine(item.ToString());
else printProperties(item);
}
}
public static void printProperties<T>(T item)
{
var properties = typeof(T).GetProperties();
foreach (var property in properties)
{
Console.WriteLine($" { property.Name} : { property.GetValue(item, null).ToString()}");
}
}
在这种情况下,将打印实例的所有属性,如果不需要以特殊方式显示属性,则无需重写 ToString。
如何制作一个接受任何类型列表的方法?做 List<object>
给我错误
Argument 1: cannot convert from 'System.Collections.Generic.List<VirusThing.Person>' to 'System.Collections.Generic.List' [Virus thing]
我需要更改什么才能使以下方法适用于任何类型的列表?
public static void printList(List<object> list)
{
foreach (var item in list)
{
Console.Write(item);
}
}
我看到 Java 有类似 List<?>
的东西可以接受任何类型的列表。
您可以像这样使方法通用
public static void printList<T>(List<T> list)
但这意味着您必须在编译时提供类型。
您可以使您的方法通用并添加约束以仅接受派生自 List<>
public static void printList<T>(T list) where T: List<T>
{
foreach (var item in list)
{
Console.Write(item);
}
}
或者这样使用:
public static void printList<T>(List<T> list) {
foreach (var item in list)
{
Console.Write(item);
}
}
最好用泛型
public static void printList<T>(IEnumerable<T> list)
{
foreach (var item in list)
{
Console.WriteLine(item.ToString());
}
}
但是如果你使用复杂的 class,比如 Person,你将不得不覆盖 ToString
class Person
{
public string Name { get; set; }
public int Age { get; set; }
public override string ToString()
{
return "Person: " + Name + " " + Age;
}
}
或者您可以使用使用反射的更复杂的代码
public static void printList<T>(IEnumerable<T> list)
{
foreach (var item in list)
{
if (item.GetType().IsPrimitive || item.GetType().Name=="String") Console.WriteLine(item.ToString());Console.WriteLine(item.ToString());
else printProperties(item);
}
}
public static void printProperties<T>(T item)
{
var properties = typeof(T).GetProperties();
foreach (var property in properties)
{
Console.WriteLine($" { property.Name} : { property.GetValue(item, null).ToString()}");
}
}
在这种情况下,将打印实例的所有属性,如果不需要以特殊方式显示属性,则无需重写 ToString。