Hallo zusammen,
leider weis ich nicht wonach ich suchen sollte für mein Problem. Es geht um die vereinfachung von einem If Ausdruck und ob dies überhaupt möglich ist.
Ich habe mehrere Werte die ich auf null Prüfe.
if (a == null || b == null || c == null || d == null /*... und immer so weiter */)
{
// mein code
}
Gibt es hier eine Schreibweise die mir das ganze etwas abkürzen kann?
Ich dachte da an so etwas wie folgendes.
if ((a || b || c || d) == null)
{
// mein code
}
Freue mich auf eine Antwort
Kommt immer darauf an.
Wenn die Variablen vom selben Typ sind, kannst du diese ggf. auch an eine eigene Methode übergeben per params.
Dann gibt diese ein true/false zurück, wenn eine der Variablen null ist.
Dadurch sparst du dir die lange Kette.
Es wäre aber auch interessant zu wissen, warum du soviele Variablen mit null checken willst?
Wenn es der selbe Typ ist, dann pack diese in eine Liste/Array.
Nachtrag:
Durch die Liste hättest du am Ende auch den Vorteil, dass du nur prüfen musst ob es Einträge gibt.
Wenn nicht, kannst du die Verarbeitung auch verlassen.
Eingefügt werden sollten dann nur Einträge, die nicht Null sind.
T-Virus
Developer, Developer, Developer, Developer....
99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
Hallo Nejox,
Gibt es hier eine Schreibweise die mir das ganze etwas abkürzen kann?
Nein.
In C# muss das explizit für jeden "Test" angegeben werden. Für Möglichkeiten siehe T-Virus' Antwort.
Weil es irgendwie zum Thema passt:
static bool IsZero(int a, int b) => a == 0 || b == 0;
kann, da es Ganzzahlen sind, vereinfacht werden zu
static bool IsZero(int a, int b) => (a | b) == 0;
Das spart eine Verzweigung im Code und ist daher auch performanter. Leserlicher ist vermutlich nicht für alle, da Bit-Operationen vorkommen, daher gibt es in .NET 6 (Herbst 2021) eine Optimierung im JIT, welche aus dem ersten Code den zweiten macht.
Aber für Referenzen, wie in deiner Frage, geht das nicht.
mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.
"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
Gelöscht - falsch verstanden, sorry.
Nein, gibt es in der Reinheit, die Du hier vermutlich willst, nicht.
Ich hab die Erfahrung gemacht: hast Du eine Anforderung, dass eine Condition zu lang wird, dann stimmt meist was am Code Design selbst nicht.
Also ein Anzeichen, dass die Software Architektur fischig oder zumindest auf dem Weg dahin sein könnte 🙂
Was Du aber immer machen kannst sind einfache Extension Methods
public static class Check
{
public static bool IsAnyNull(params object[] args) => args.Any(x => x is null);
}
und dann eben
int? a = null;
double? b = null;
string c = null;
if(Check.IsAnyNull(a, b, c))
{
// do it
}
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Wenn du prüfen wolltest: "Sind alle null?" könntest Du den "null-coalescing operator" verwenden.
if ((a ?? b ?? c ?? d ?? e?? f) == null) {
...
}
Aber eben nur für alle nicht für einen.
Das ginge für: "Ist eines null?", aber etwas hässlich und erzeugt zudem unnötigen Speicherbedarf
if (new []{a,b,c,d,e,f}.Any( o => o == null)) {
...
}