在IEnumerable <t> </t>的实例中获取类型T的属性名称

时间:2012-02-06 11:18:19

标签: c# asp.net-mvc razor

我有一个人类:

public class Person {

public long Id { get; set; }
public string LastName { get; set; }
public string FirstName { get; set; }
public string PhoneNo { get; set; }
public string FaxNo { get; set; }
public int Age { get; set; }
public DateTime BirthDate { get; set; }

}

人物实例是这样的:

IEnumerable<Person> people = new List<Person>() { /* Define people */ }

所以我需要获取Person Use People的属性名称,当然我可以使用它:

string fr = people.FirstOrDefault().FirstName;

那么people没有Person的任何实例的情况呢? 我知道什么时候我们没有Person所以我们没有任何FirstName但我需要在ASP.NET MVC的列表视图中访问它我希望像这样使用:

  @Html.DisplayFor(model => model.LastName)

有人对此有任何想法吗?

2 个答案:

答案 0 :(得分:3)

如果people为空,则FirstOrDefault()将返回null,因此您将获得空引用异常。

目前还不清楚你想要在这里发生什么,但如果你只想要null,你可以使用:

string fr = people.Select(p => p.FirstName).FirstOrDefault();

这将首先进行投影 - 所以如果没有人,FirstOrDefault()将返回null,否则将返回第一个人的名字。

答案 1 :(得分:0)

这不是一个完整的答案,但我希望可以帮助,您可以定义一个空的Person实例并使用如下所示:

@model IEnumerable<YourNameSpace.Models.Person>
@{
ViewBag.Title = "Index";
YourNameSpace.Models.Person p = new YourNameSpace.Models.Person();
}

并且:

@Html.LabelFor(x => p.FirstName)