私はアップグレードプロジェクトを進めており、最近アップグレードされたバージョンのDLLで問題が発生し始めました。私は、元のDLLを逆コンパイルし、ステートメントの場合は、次を発見した:この演算子は何ですか、 "??"
if (fieldConfiguration == null && Context.ContentDatabase != null)
{
Item obj = Context.ContentDatabase.SelectSingleItem(
string.Format("//*[@@templateid='{0}' and @@key='{1}']",
(object) TemplateIDs.TemplateField, (object) fieldName));
}
私は、DLLのバージョンアップを逆コンパイルし、次のように声明をした:
if (fieldConfiguration == null && (Context.ContentDatabase ?? Context.Database) != null)
{
Item obj = Context.ContentDatabase.SelectSingleItem(
string.Format("//*[@@templateid='{0}' and @@key='{1}']",
(object) TemplateIDs.TemplateField, (object) fieldName));
}
私はコードをステップ実行することができましたDLLをdotPeekで逆コンパイルし、dotPeekシンボルサーバーの機能を使用します。 Context.ContentDatabaseがnullであるため、アップグレードDLLを使用しているときにコードが失敗していることがわかります。私が理解していないのは、その二重三項演算子がどのように評価されるかです。誰かが私のために明確にすることができますか?このアセンブリの作成者がContext.ContentDatabaseのヌルチェックを望んでいたように見えますが、誤っている可能性があります。助けてくれてありがとう!
バイナリnull-coalesce演算子( '?')を "ternary"と呼んでいますか? –
うん、それはそれがhahaと呼ばれていたことを知らなかった –
だから "二重三元"は "二つの疑問符"を意味する?単項は何かがあることを意味し、バイナリは何かを意味し、三項は三を意味し、四次は明白でなければならない。 –