2012-02-06 51 views
2

我有一个Person类:获取类型T的属性名称中的IEnumerable实例<T>

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 */ } 

所以我需要得到的属性名称人使用人,当然我可以使用这个:

string fr = people.FirstOrDefault().FirstName; 

那么情况如何呢people还没有Person的任何实例吗? 我知道,当我们没有任何Person,所以我们没有任何FirstName但我需要访问它在ASP.NET MVC的列表视图我想用这样的:

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

没有任何一个有任何想法?

回答

3

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

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

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

这将做投影第一 - 所以FirstOrDefault()只会如果返回null有不是人,或者是第一人的名字。

+0

好,在编辑或我们使用@Html.LabelFor(model => model.FirstName)来显示属性名称,在这种方法中,我们可以将DisplayName属性显示为属性名称,但在List View中我们有一个IEnumerable类型所以我们不能使用这种方法,并且使用Display或D有趣列表视图中的isplayName属性。 – Saeid 2012-02-06 11:30:04

+0

@Saeid:对不起,我真的不清楚你想要做什么,或者这与一个空集合有什么关系...... – 2012-02-06 11:31:17

+0

正如我所说我只是想在列表视图中更改属性名称的显示的MVC,也许(并非总是)传递给视图的集合是空的。但感谢回答 – Saeid 2012-02-06 11:36:09

0

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

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

和:

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