5

私はの線に沿って何かを表示したい多くのケースに出くわしています

@ev.Event.Instructor.Name

ただし、instructorプロパティはnullにすることができます。そのような場合、「オブジェクト参照はオブジェクトのインスタンスに設定されていません」。エラーがスローされますが、それを無視して何も返さないようにします。

nullをチェックするために、あちこちにたくさんの三元式を作成するよりも、これを処理するためのより良い方法はありますか?

同等のphp式は次のようになります

@$ev.Event.Instructor.Name

私はいくつかのWebフォームビューをMVCに変換してきましたが、同等のEvalステートメントはnull参照エラーを無視します。

明確にするために:@evプロパティはlinqクエリから来ており、私が持っている場合もあります

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

mainContactをnullにするだけでなく、mainContactの会社もnullにすることができます。nullを3回チェックして、すべての属性を選択することも同様に悪い解決策のようです。

4

5 に答える 5

4

1つの方法は、イベントに別のプロパティを追加することです。

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

nullオブジェクトを回避するために、コンストラクターでオブジェクトをインスタンス化する必要があります。例:

public class Event{
     public Event(){
          Instructor = new Instructor();
     }
}
于 2012-12-26T22:14:37.657 に答える
0

私が議論の余地のある量の厄介な別のアプローチは次のとおりです。

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

三元式のselectallに18程度の余分なプロパティを追加する代わりに、このアプローチを使用することにしました。

于 2012-12-26T22:49:43.470 に答える
-1

何かのようなもの:

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