如何创建一个接受任何类型列表的方法

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。