C# 使用列表<&燃气轮机;在船舱内
我创建了一个名为people的列表,其中包含身份号码、姓名、头衔和城市。我想使用foreach自动读取这个列表,但语法有点僵化。有人能解释一下吗。下面是我的代码C# 使用列表<&燃气轮机;在船舱内,c#,C#,我创建了一个名为people的列表,其中包含身份号码、姓名、头衔和城市。我想使用foreach自动读取这个列表,但语法有点僵化。有人能解释一下吗。下面是我的代码 List<Person> people = new List<Person>(); Person p1 = new Person(74, "Brad","Millington","Program Manager", "Milford"); Person p2 = new Person(58, "John", "
List<Person> people = new List<Person>();
Person p1 = new Person(74, "Brad","Millington","Program Manager", "Milford");
Person p2 = new Person(58, "John", "Kaufman", "Author", "Ottawa");
Person p3 = new Person(68, "-*", "Washington" , "Developer", "Redmond");
Person p4 = new Person(79, "Abraham", "Licoln", "Developer", "Redmond");
foreach (string s in people)
{
people.Add(s);
}
List people=newlist();
人员p1=新人(74人,“布拉德”、“米林顿”、“项目经理”、“米尔福德”);
人物p2=新人(58,“约翰”、“考夫曼”、“作家”、“渥太华”);
人员p3=新人(68、“-*”、“华盛顿”、“开发商”、“雷蒙德”);
人员p4=新人员(79,“亚伯拉罕”、“利科伦”、“开发商”、“雷蒙德”);
foreach(人中的字符串s)
{
人员。添加(s);
}
您的人员列表开始时当前为空
您需要将p1、p2、p3和p4添加到人员列表中
Person p1 = new Person(74, 'Brad', 'Millington', 'Program Manager', 'Milford');
people.add(p1);
然后在你的for-each中,如果你正在打印它们,我想你的名字有一个getter
foreach (Person p in people)
{
Console.Write(p.getFirstName() + ' ' + p.getLastName());
}
我自己没有做过任何C#,但根据我使用Java的经验,
foreach
语句用于循环遍历包含数据的枚举,而不是首先填充集合。你不能在没有项目的东西中循环-在你的例子中,你试图在人物中为每个“s”做一个“for each”,但是人物是空的,因为你还没有添加任何内容
如果要将这4个人添加到列表中,只需直接添加他们:
List<Person> people = new List<Person>();
people.Add(new Person(74, "Brad","Millington","Program Manager", "Milford"));
people.Add(new Person(58, "John", "Kaufman", "Author", "Ottawa"));
people.Add(new Person(68, "-*", "Washington" , "Developer", "Redmond"));
people.Add(new Person(79, "Abraham", "Licoln", "Developer", "Redmond"));
注意,此时,循环将循环并在每次迭代中为您提供一个
Person
实例,而不是一个字符串。为了在编写时使用foreach,您必须为Person
类隐式转换为string(我不建议这样做)。好的,您的代码有一些问题:
people
是Person
对象的列表,因此将其作为字符串列表进行迭代将导致编译错误foreach
时,无法修改正在迭代的集合。您可以在循环中使用.Add()
来执行此操作people
为空,因此循环无论如何都不会执行List<Person> people = new List<Person>();
Person p1 = new Person(74, "Brad","Millington","Program Manager", "Milford");
Person p2 = new Person(58, "John", "Kaufman", "Author", "Ottawa");
Person p3 = new Person(68, "-*", "Washington" , "Developer", "Redmond");
Person p4 = new Person(79, "Abraham", "Licoln", "Developer", "Redmond");
people.Add(p1);
people.Add(p2);
people.Add(p3);
people.Add(p4);
foreach (Person p in people)
{
Console.WriteLine(p.FirstName + " " + p.LastName);
}
List people=newlist();
人员p1=新人(74人,“布拉德”、“米林顿”、“项目经理”、“米尔福德”);
人物p2=新人(58,“约翰”、“考夫曼”、“作家”、“渥太华”);
人员p3=新人(68、“-*”、“华盛顿”、“开发商”、“雷蒙德”);
人员p4=新人员(79,“亚伯拉罕”、“利科伦”、“开发商”、“雷蒙德”);
人员。添加(p1);
新增(p2);
新增(p3);
新增(p4);
foreach(人员中的人员p)
{
Console.WriteLine(p.FirstName+“”+p.LastName);
}
作为对其他正确答案的补充,我注意到创建测试数据的更好方法是使用集合初始值设定项:
var people = new List<Person>{
new Person(74, "Brad","Millington","Program Manager", "Milford"),
new Person(58, "John", "Kaufman", "Author", "Ottawa"),
new Person(68, "-*", "Washington" , "Developer", "Redmond"),
new Person(79, "Abraham", "Licoln", "Developer", "Redmond")
};
List people=新列表()
{
新人(74岁,“布拉德”、“米林顿”、“项目经理”、“米尔福德”),
新人(58岁,“约翰”、“考夫曼”、“作家”、“渥太华”),
新人(68、“-*”、“华盛顿”、“开发商”、“雷蒙德”),
新人(79,“亚伯拉罕”、“利科伦”、“开发商”、“雷德蒙”)
};
foreach(人对人)
{
Console.WriteLine(person.Name);
}
您可以使用列表初始值设定项:
var people = new List<Person>{
new Person(74, "Brad","Millington","Program Manager", "Milford"),
new Person(58, "John", "Kaufman", "Author", "Ottawa"),
new Person(68, "-*", "Washington" , "Developer", "Redmond"),
new Person(79, "Abraham", "Licoln", "Developer", "Redmond")
};
var people=新列表{
新人(74岁,“布拉德”、“米林顿”、“项目经理”、“米尔福德”),
新人(58岁,“约翰”、“考夫曼”、“作家”、“渥太华”),
新人(68、“-*”、“华盛顿”、“开发商”、“雷蒙德”),
新人(79,“亚伯拉罕”、“利科伦”、“开发商”、“雷德蒙”)
};
听起来您想填充一个列表,然后在foreach循环中读取其值。如果这就是您想要做的,那么问题的核心是:“什么是我的对象的字符串表示?”
例如,如果您正在调用
p.ToString()
,其中p
是一个Person
,默认情况下您将获得其类型名称。创建对象时,有时重写Person
的隐含基类的ToString()
方法非常有用,即System.Object
。请注意,当您重写ToString()
方法时,如果您没有重写GetHashCode()
和Equals()
您需要向我们提供该列表的格式,因为您显然只是在扫描字符串的列表/数组。您的列表为空,您创建了4个人,但从未将他们添加到列表中-1请修改问题和代码,这毫无意义。您想读什么?在您的示例中,列表中没有任何内容,但您正在尝试向其中添加字符串。这不起作用,因为它不是字符串列表。我应该在评论之前刷新。print
在C#中不存在。使用控制台。改为编写。此外,属性的调用与方法不同。除此之外,这是正确的。+1用于在不知道任何C#的情况下正确使用它。@KyleTrauberman是的,但您可以轻松创建一个函数print
,它可以满足您的需要。正如关于习语的另一个注释,强调@KyleTrauberman的观点:名字和姓氏更可能表示为属性,soConsole.Write(p.FirstName+“”+p.LastName)代码>
var people = new List<Person>{
new Person(74, "Brad","Millington","Program Manager", "Milford"),
new Person(58, "John", "Kaufman", "Author", "Ottawa"),
new Person(68, "-*", "Washington" , "Developer", "Redmond"),
new Person(79, "Abraham", "Licoln", "Developer", "Redmond")
};