Ich bin auf einem Upgrade-Projekt und vor kurzem aufgetretene Probleme mit der aktualisierten Version einer DLL. Ich dekompilierten die ursprüngliche DLL und fanden die folgende if-Anweisung:Was ist dieser Operator, "??"
if (fieldConfiguration == null && Context.ContentDatabase != null)
{
Item obj = Context.ContentDatabase.SelectSingleItem(
string.Format("//*[@@templateid='{0}' and @@key='{1}']",
(object) TemplateIDs.TemplateField, (object) fieldName));
}
ich dann die aktualisierte Version der DLL dekompilierten und die Erklärung war wie folgt:
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));
}
konnte ich den Code, um durch durch Dekompilieren der DLLs mit dotPeek und Verwenden der dotPeek-Symbolserverfunktionalität. Ich kann sehen, dass der Code bei Verwendung der Aktualisierungs-DLL fehlschlägt, da Context.ContentDatabase null ist. Was ich nicht verstehe, ist, wie dieser doppelte ternäre Operator ausgewertet wird. Könnte jemand für mich klären, was dort vor sich geht? Es scheint, als ob die Ersteller dieser Assembly eine Nullprüfung für Context.ContentDatabase wollten, aber möglicherweise einen Fehler gemacht haben. Danke für die Hilfe!
Rufst du den binären Null-coalesce Operator ('' ??) "ternäre"? –
Yep, wusste nicht, dass es so heißt haha –
Also "doppelt ternär" bedeutet "Zwei Fragezeichen"? Unary bedeutet, dass es etwas von etwas gibt, binär bedeutet zwei von etwas, ternär bedeutet drei, quaternär sollte offensichtlich sein. –