忽略“未设置为对象实例的对象引用”的最佳方法是什么?嵌套属性错误

本文关键字:方法 最佳 是什么 错误 属性 嵌套 对象引用 设置 实例 对象 忽略 | 更新日期: 2023-09-27 17:49:32

我遇到过很多情况我想在

的行中显示一些东西
@ev.Event.Instructor.Name

但是讲师属性允许为空。在这些情况下,抛出"对象引用未设置为对象的实例"错误,但我想忽略它,并且不返回任何内容。

是否有更好的方法来处理这个问题,而不是在所有的地方创建大量的三元表达式来检查null?

对应的php表达式是
@$ev.Event.Instructor.Name

我一直在翻译一些webforms视图到MVC和等效的Eval语句会忽略空引用错误。

澄清:@ev属性来自linq查询还有一些情况下我有

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

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

忽略“未设置为对象实例的对象引用”的最佳方法是什么?嵌套属性错误

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

public string InstructorName
{
    get { return Instructor == null ? string.Empty : Instructor.Name; }
}

不存在"忽略异常"这回事。你不应该引起异常,或者应该处理它们。

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

@(ev.Event.Instructor == null ? String.Empty : ev.Event.Instructor.Name)

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

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

我想到的另一种方法是:

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

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

类似于

@$ev.Event.Instructor != null ? @$ev.Event.Instructor.Name : String.Empty