【发布时间】:2016-11-08 19:09:42
【问题描述】:
我是 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}
};
现在,我尝试对这些项目中的每一项进行迭代,并且我做到了(使用以下代码)
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);
}
当我想创建一个方法来执行我对最后一段代码所做的事情时,问题就来了,我的想法是创建一个方法并将这个对象(在本例中为角色)传递给该方法并在内部执行循环.我做的是这样的:
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!!
}
}
我希望该方法执行的操作是执行我对 for 循环所做的操作,以便能够接收对象、迭代并打印每个项目。
谢谢!让您全神贯注。
【问题讨论】:
-
您是否有理由不创建具体类而不是匿名对象?似乎这一切都可以通过一个简单的类实现来解决。你的方法名称已经描述了你应该接收什么样的对象,所以我个人认为匿名类型不是这里的方法。
-
考虑到自定义类将少于 10 行代码,我认为没有理由通过使用
dynamic或反射来牺牲编译类型的安全性。创建一个类并将其用作数组(或IEnumerable<>)作为输入参数的类型。 -
谢谢!是的,原因是我正在学习数组,所以他们确实举了一个使用匿名类数组的例子......如果我在同一个代码块中执行循环,它会很好,但是如果我尝试创建一种循环然后问题开始的方法,因为我不知道这些类是什么...... :-(