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 循环所做的事情,以便能够接收对象,迭代和打印每个项目。
谢谢你!全心全意。
我看到两个选项
我认为最好的选择是创建 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)