忽略“未设置为对象实例的对象引用”的最佳方法是什么?嵌套属性错误
本文关键字:方法 最佳 是什么 错误 属性 嵌套 对象引用 设置 实例 对象 忽略 | 更新日期: 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