将匿名类数组传递给方法并循环 c#

Gui*_*rez 3 c# loops anonymous class

我是 c# 的新手,想问你一些事情,请帮忙。

我使用如下匿名类创建了一个包含 3 个人的变量:

var personas = new[] { 
                new {nombre = "Guillermo", apellido = "Pérez", edad = 37}
                , new {nombre = "Juan", apellido = "García", edad = 27}
                , new {nombre = "Maria", apellido = "Rosina", edad = 47}
            };
Run Code Online (Sandbox Code Playgroud)

现在,我尝试迭代这些项目中的每一个,我做到了(使用以下代码)

for (int i = 0; i < personas.Length; i++)
{
    var persona = personas[i];
    Console.WriteLine("{0} {1} tiene {2} años.", persona.nombre, persona.apellido, persona.edad);
}
Run Code Online (Sandbox Code Playgroud)

当我想创建一个方法来做我对最后一段代码所做的事情时,问题就出现了,这个想法是创建一个方法并将这个对象(在本例中为角色)传递给该方法并在内部执行循环。我所做的是这样的:

 showPersonas(personas);

 static void showPersonas(object[] personsList)        {

        for (int i = 0; i < personsList.Length; i++) {
            var algo = personsList[i];
            Console.WriteLine(personsList[i].nombre); ----> ERROR!!

        }
    }
Run Code Online (Sandbox Code Playgroud)

我希望该方法做的是做我对 for 循环所做的事情,以便能够接收对象,迭代和打印每个项目。

谢谢你!全心全意。

Fab*_*bio 5

我看到两个选项

我认为最好的选择是创建 class Person。如果在编写属性名称时输入错误,编译器将在编译期间显示错误,稍后将尝试重命名它。

public class Person
{
    public string Nombre { get: set; }
    public string Apellido { get: set; }
    public string Edad { get: set; }
}


static void showPersonas(Person[] personsList)        
{
    foreach (var algo in personsList) 
    {
        Console.WriteLine(algo.nombre);
    }
}
Run Code Online (Sandbox Code Playgroud)

另一种选择:dynamic关键字。
但要小心 - 使用dynamic关键字将类型检查移动到运行时。这将在运行时抛出相同的异常,您现在在编译时遇到。

static void showPersonas(dynamic[] personsList)        
{
    for (int i = 0; i < personsList.Length; i++) 
    {
        var algo = personsList[i];
        Console.WriteLine(algo.nombre);

    }
}
Run Code Online (Sandbox Code Playgroud)