Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Vereinfachung If Ausdruck
Nejox
myCSharp.de - Member



Dabei seit:
Beiträge: 19

Themenstarter:

Vereinfachung If Ausdruck

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
T-Virus
myCSharp.de - Member



Dabei seit:
Beiträge: 1871
Herkunft: Nordhausen, Nörten-Hardenberg

beantworten | zitieren | melden

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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von T-Virus am .
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.
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 7548
Herkunft: Waidring

beantworten | zitieren | melden

Hallo Nejox,
Zitat
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!"
private Nachricht | Beiträge des Benutzers
JimStark
myCSharp.de - Member

Avatar #dOpLzh7hN1az1g0eGRc0.jpg


Dabei seit:
Beiträge: 284

beantworten | zitieren | melden

Gelöscht - falsch verstanden, sorry.
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von JimStark am .
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15976

beantworten | zitieren | melden

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 - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
c#arp
myCSharp.de - Member



Dabei seit:
Beiträge: 10
Herkunft: Mannheim

beantworten | zitieren | melden

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)) {
...
}
private Nachricht | Beiträge des Benutzers
Nejox
myCSharp.de - Member



Dabei seit:
Beiträge: 19

Themenstarter:

beantworten | zitieren | melden

Danke für die Antworten.
Das hilft mir weiter :-)
private Nachricht | Beiträge des Benutzers