如何在名为Person的对象中打印出与Name属性不同的所有名称?我有一个Person对象列表
Person.Name
Nick
Brit
BLANK
Nick
BLANK
Dog
Cat
我想输出所有不同的名字,不包括空字符串
Nick
Brit
Dog
Cat
答案 0 :(得分:3)
你可以用LINQ做得非常好:
List<string> distinctNames = people.Select(p => p.Name)
.Where(n => !String.IsNullOrEmpty(n))
.Distinct()
.ToList();
答案 1 :(得分:1)
我不确定您的代码或程序的外观,但为了在人员列表中获取所有不同的名称,您首先必须将每个单独的名称添加到列表中,然后选择所有不同的名称。
这应该可以解决问题:
var names = new List<string>();
foreach(var person in persons)
{
if (!string.IsNullOrEmpty(person.Name))
{
names.Add(person.Name);
}
}
var distinctNames = names.Distinct();
答案 2 :(得分:1)
您可以使用HashSet来跟踪遇到的名称 - 如下所示:
HashSet<string> nameSet = new HashSet<string>();
List<Person> persons = getPersonList(); // get the list somehow
foreach (Person p in persons) {
string name = p.Name;
if (!string.IsNullOrEmpty(name)) {
if (!nameSet.Contains(name)) {
nameSet.Add(name);
}
}
}
List<string> names = nameSet.ToArray();
foreach (string name in names) {
Console.WriteLine(name);
}
编辑:将其称为&#34; C#2.0版本。&#34; LINQ答案更优雅。
答案 3 :(得分:1)
您也可以使用LINQ
完成此操作var DistinctNames = persons.Where(w => !String.IsNullOrEmpty(w.Name)).Select(s => s.Name).Distinct();
这将为您提供IEnumberable
字符串。如果要在控制台窗口中打印出来,可以使用
persons.Where(w => !String.IsNullOrEmpty(w.Name)).Select(s => s.Name).Distinct().ToList().ForEach(f => Console.WriteLine(f.Name));
这会使用List
ForEach
,这不是最佳做法,具体取决于您的要求,但这只是简单的一行来做一件简单的事情。