C#のバックグラウンドを持つので、(エンティティフレームワークの関係を使用しているときに)クラスプロパティにアクセスするときは、常に?.
演算子を使用します。nullの条件演算子は、常に最初のnull発生を破棄しますか?
たとえば、これを使用してステータスクラスがnullの場合、nullオブジェクトからプロパティを取得しようとしているので、例外がスローされます。このような
var order = DB.Order.Find(1);
var status = order.status.text;
これを修正するために、私は何ができる何か:
var address = order.status?.text ?? "No status";
?.
オペレータは最初のヌルでブレークし、acessingsの残りの部分をスキップします。
私はPHPで同じような状況に出くわしたし、このような何かしなければならなかった:ステータスが空の場合
$order = Orders::find(1);
$status = $order->status->text;
を、それがnullのオブジェクトのうちのプロパティを取得しようとしている(同じ例外がスローされます)。
しかし、私はこれをしなかったし、それが働いた:
$status = $order->status->text ?? "No status";
どうやら、PHPはstatus
がnullの場合はアクセスしてる->text
を飛ばしています。
私はcreated a fiddleこれが私の環境だけではないかどうかを確認するのは驚くべきことですが、うまくいきました。
<?php
$j = "Hello!";
echo $a->b->c->d->e ?? $a->b->c->d ?? $a->b->c ?? $a->b ?? $j;
< < "こんにちは!"
これは実際にPHPの??
オペレータの期待される動作ですか?私はこれがドキュメントで言及されていなかったので。
私はissetを内部的に使用しているという記述について間違っているかもしれませんが、実装はおそらく同じです。 – Phiter