我无法表达我想做的事。请帮忙。考虑下面的代码:
void Main()
{
List<Person> person = new List<Person>
{
new Person { Name = "Maria Anders", Age = 21 },
new Person { Name = "Ana Trujillo", Age = 55 },
new Person { Name = "Thomas Hardy", Age = 40 },
new Person { Name = "Laurence Lebihan", Age = 18 },
new Person { Name = "Victoria Ashworth", Age = 16 },
new Person { Name = "Ann Devon", Age = 12 }
};
person.Select(x => new { x.Name, x.Age }).Dump();
}
class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
我想打印一个人的Name | Age | Status
。
Status
是派生列。如果此人的年龄≥1岁,则其值应为“Adult
”,否则为“未成年人”。
答案 0 :(得分:6)
首先,您需要将一个名为Status
的属性添加到类Person
。
class Person
{
public string Name { get; set; }
public int Age { get; set; }
public string Status
{
get { return Age >= 18 ? "Adult" : "Under age"; }
}
public override string ToString()
{
return string.Format("{0}|{1}|{2}",Name,Age,Status);
}
}
然后你可以循环进入人员列表来做你的行动:
foreach(Person p in persons)
{
Console.WriteLine(p);
}
//Or
persons.ForEach( p => Console.WriteLine(p) );
添加Status
属性和覆盖ToString
方法的原因是将逻辑放在一个位置。否则,假设有一天,您需要将“未成年人”更改为“Nonage”,您不需要在Person
班级中的任何地方更改字符串,而只需更改一个位置。
答案 1 :(得分:2)
怎么样:
person.Select(p =>
String.Format("{0} | {1} | {2}",
p.Name, p.Age, p.Age >= 18 ? "Adult" : "Under age"))
.Dump();
然后在其他地方:
static void Dump(this IEnumerable<string> ss)
{
foreach(var s in ss)
{
Console.WriteLine(s);
}
}
答案 2 :(得分:1)
person.Select(x => new { x.Name, x.Age ,Status = (x.Age>=18) ? "Adult":"Under Age"})
答案 3 :(得分:1)
var y = person.Select(x =&gt; new {x.Name,x.Age,Status = x.Age&gt; 18?“Adult”:“Minor”});
答案 4 :(得分:0)
尝试:
person.Select(x => new {Name = x.Name, Age = x.Age, Status = ((x.Age>=18) ? "Adult" :"Child") }); ;
答案 5 :(得分:0)
简单.. sb.ToString()会给你你想要的东西。
StringBuilder sb = new StringBuilder();
foreach(Person p in person)
{
string status = p.Age >= 18 ? "Adult" : "Not Adult";
sb.AppendLine(String.Format("{0} {1} {2}",p.Name,p.Age.ToString(),status));
sb.AppendLine(Environment.NewLine);
}