从Object获取数组

时间:2014-12-15 00:36:18

标签: c# arrays class object

我有以下课程定义。

public class people
{
    public string first_name { get; set; }
    public string last_name  { get; set; }
    public DateTime date_of_birth  { get; set; }
}

然后,我创建了一系列人员,如下所示:

    people[] the_people = new people[3];
    the_people[0].first_name="Tony";
    the_people[0].last_name="Carrot";
    the_people[0].date_of_birth=new DateTime(1959-03-16);
    the_people[1].first_name="Joe";
    the_people[1].last_name="Tomato";
    the_people[1].date_of_birth=new DateTime(1963-06-2);
    the_people[2].first_name="Tarina";
    the_people[2].last_name="Wends";
    the_people[2].date_of_birth=new DateTime(1982-11-22);

如何将the_people对象的first_names存储在新字符串数组中,以便获得如下输出。这可能通过linq

string[] the_peoples_first_names=new string[3] {"Tony","Joe","Tarina"}; 

同样,我如何获得一个日期时间数组,以便将所有人的出生日期存储在单独的DateTime数组中。

2 个答案:

答案 0 :(得分:6)

您尝试做的事情可以通过LINQ完成。您基本上要求的是投影

MSDN describes a projection就是这样:

  

投影是指将对象转换为新形式的操作,该新形式通常仅包含随后将使用的那些属性。通过使用投影,您可以构造从每个对象构建的新类型。您可以投影属性并对其执行数学函数。您也可以在不更改原始对象的情况下对其进行投影。

因此,我们希望将the_people数组中的对象投影到新数组中。文档建议使用Select LINQ运算符:

var the_people_names = the_people.Select(p => p.first_name);

Select内部的内容是代理人,通常采用lambda expression或匿名代表的形式。

但我们还没到那里。 Select只是一个延迟评估,它创建了一个可枚举的序列。它不返回数组。要创建数组,我们使用.ToArray()

var the_people_names_array = the_people.Select(p => p.first_name).ToArray();

您可以将此方法用于people类的任何属性,包括出生日期。

您可以在LINQ about page上了解有关MSDN上LINQ的更多信息。

答案 1 :(得分:4)

var firstNames = the_people.Select(p => p.first_name).ToArray();
var dates_of_birth = the_people.Select(p => p.date_of_birth).ToArray();