5

我遇到了很多我想展示一些东西的情况

@ev.Event.Instructor.Name

但是教练属性允许为空。在这些情况下,“对象引用未设置为对象的实例”。抛出错误,但我想忽略它并且没有返回任何内容..

有没有比到处创建大量三元表达式来检查空值更好的方法来处理这个问题?

等效的 php 表达式将是

@$ev.Event.Instructor.Name

我一直在将一些 webforms 视图转换为 MVC,等效的 Eval 语句将忽略空引用错误。

澄清一下:@ev 属性来自 linq 查询,在某些情况下我也有

@ev.mainContact.FirstName @ev.mainContact.LastName
@ev.mainContact.Company.Name

不仅 mainContact 可以为空,而且 mainContact 的公司也可以为空。使用三元检查 null 来选择每个属性似乎是同样糟糕的解决方案。

4

5 回答 5

4

一种方法是向 Event 添加另一个属性:

public string InstructorName
{
    get { return Instructor == null ? string.Empty : Instructor.Name; }
}
于 2012-12-26T22:14:50.127 回答
3

没有“忽略异常”之类的东西。您不应该引起异常或应该处理它们。

public class Event {
     public Event() {
          this.Instructor = new Instructor();
     }
}

或者

@(ev.Event.Instructor == null ? String.Empty : ev.Event.Instructor.Name)
于 2012-12-26T22:16:05.800 回答
0

我认为另一种令人讨厌的方法是:

@{try{@ev.Event.Instructor.Name}catch{}}

我决定使用这种方法,而不是在使用三元表达式的全选中添加 18 个左右的额外属性。

于 2012-12-26T22:49:43.470 回答
0

您应该在构造函数中实例化您的对象,以避免空对象,例如:

public class Event{
     public Event(){
          Instructor = new Instructor();
     }
}
于 2012-12-26T22:14:37.657 回答
-1

就像是:

@$ev.Event.Instructor != null ? @$ev.Event.Instructor.Name : String.Empty
于 2012-12-26T22:14:35.487 回答