Null-Bedingungsoperator zum Annullieren der Existenz von Array-Elementen

Null-Bedingungsoperator zum Annullieren der Existenz von Array-Elementen

Nein, weil es eine Null ist -Bedingter Operator, kein indexoutofrange -Bedingungsoperator und ist lediglich syntaktischer Zucker zu etwas wie dem Folgenden:

int? count = customers?[0]?.Orders?.Count();

if (customers != null && customers[0] != null && customers[0].Orders != null)
{
    int count = customers[0].Orders.Count();
}

Sie können sehen, dass Sie Ihren regulären IndexOutOfRangeException erhalten, wenn es keinen nullten Kunden gibt .

Eine Möglichkeit, dies zu umgehen, besteht darin, eine Erweiterungsmethode zu haben, die nach dem Index sucht und null zurückgibt, wenn er nicht existiert:

public static Customer? GetCustomer(this List<Customer> customers, int index)
{
    return customers.ElementAtOrDefault(index); // using System.Linq
}

Dann könnte Ihre Prüfung lauten:

int? count = customers?.GetCustomer(0)?.Orders?.Count();

customers?.FirstOrDefault()?.Orders?.Count();

Keine Nullen, kein Problem.


Wenn Sie das n-te Element ohne NullReference- oder IndexOutOfRange-Ausnahmen erhalten möchten, können Sie Folgendes verwenden:

customers?.Skip(n)?.FirstOrDefault()