Wie übergeben Sie einen null-Wert, Farbe
Ich Frage mich nur, wie ich kann, übergeben Sie einen null Farbe auf eine Methode.
Hier ist ein Beispiel mit einer Methode, die bekommt einen color-parameter:
protected void myMethod(Color color,other parameters...) {}
Jetzt bin ich mit der gezeigten Zustand. Je nach Zustand würde ich gerne die Farbe ändern.
if(1) {myMethod(Color.Red,....)}
if(2) {myMethod(Color.Black,...)}
if(3) {myMethod(Color.Ignore,...)} //so here just ignore this color parameter and keep the original.
Ich weiß, ich kann viele Dinge tun, um dies zu überwinden, aber wie gesagt ich Frage mich nur, gibt es einen besseren Weg einen "ignorieren" - Wert, so wird die ursprüngliche Farbe des Elements.
- Bekommst du nicht die aktuelle Farbe irgendwie Zwischenspeichern? Vielleicht sollten Sie sich Gedanken über die Aufteilung der Verfahren in mehrere Teile
- Sie
null
? - Sie können machen es zu einem nullable-Typ,
Color?
- Vielleicht Farbe.Transparent ?
- Ich kann die original-Farbe, aber es ist nur über die Nutzung. Ich denke, es sollte einen besseren Weg, einfach nur sagen, das element, das seine eigene Farbe, anstatt die elemenets Farbe und übergeben Sie es zurück zu.
Color
ist ein Wert-Typ (eine Struktur), so kann es nicht seinnull
.Nullable<Color>
(oderColor?
) kann null sein. msdn.microsoft.com/en-us/library/system.drawing.color.aspx- Es kann leer sein: Farbe.Leer und Sie können überprüfen, ob eine bestimmte Farbe, die variable ist leer, die IsEmpty-Eigenschaft.
- noch mehr nutzen und zusätzliche Bedingungen. es klingt nicht richtig, denke ich. dann haben Sie noch eine weitere Bedingung.
- Halten Sie schriftlich eine überlastung der
myMethod
welche nichtColor
argument? EDIT: Woops, gar nicht gemerkt, da war die Antwort suggeriert genau dies. 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was:
Dort, Wo In Farbe? null-Werte zulässt, so können Sie übergeben Sie null statt und überprüfen Sie den Wert in Ihrer Methode. Wenn Farbe == null, dann bleiben die original?
Erstellen Sie eine überladung der Methode, die nicht Farbe benötigen und nennen Sie es, wenn Sie möchten, verwenden Sie den Standardwert (es ist besser, nicht zu erbringen argument überhaupt, wenn Sie nicht verwenden es in der Methode, als durch
null
Wert der Methode):Außerdem schlage ich vor, Sie zu setzen, optionale parameter an das Ende der Parameter:
Code:
Können Sie sogar Fragen, compiler, um "überlast" (siehe Kommentare) für Sie:
HINWEIS: ich mag zu vermeiden, irgendwelche verwirrenden code. E. g. rufen Sie
sieht sehr verwirrend für mich. Was ist
null
? Warum übergeben Sie null, wenn niemand in der Lage, es zu benutzen in der Methode? Folgenden Aufruf sieht besser ausEs nicht Durcheinander Anrufer mit übergabe von Parametern, die nicht benutzt werden. Ich brauche nicht zu denken, was
null
bedeutet. Aber auch in diesem Fall wir wissen, dass einige Informationen, die noch nicht verfügbar für andere Entwickler - wir zeichnen, einen Punkt mit vorgegebenen Farbe, und der Methode, nicht sagen nichts über es. Also, ich würde eine andere Methode verwendenAbsolut nicht verwirrend.
Können Sie haben einfach nur eine überlastung, die nicht nehmen Sie ein color-Objekt:
und
ODER
Machen die Farbe, die parameter nullable, so können Sie übergeben Sie null und nur eine null-überprüfung innerhalb der Methode.
Wenn
myMethod
ist, den du geschrieben hast , empfehle ich ein nullable-Typ, wieSystem.Drawing.Color
ist ein Wert-Typ. Daher können Sie die Methode so:Alternativ, wenn Sie nicht ändern können, dass (zum Beispiel
myMethod
eine Schnittstelle implementiert, welche Kräfte SieColor
stattColor?
), dann können Sie fallback für die übergabe bedeutungslos Wert derColor
geben. Zum BeispielColor.Transparent
arbeiten kann, aber das ist nur eine Annahme. Der code für diese erfordert die änderung der ersten wenn-Bedingung vonmyMethod
oben auszu
Update
Nachdem die Frage geklärt ist werde ich besser dem gewünschten Ergebnis führen, Vorausgesetzt, Sie haben umgestaltet werden, die
myMethod
zu akzeptierenColor?
stattColor
können Sie beseitigen die boilerplate-code:mit so etwas wie dies:
Die Magie ist, dass jeder nullable-Typ kann implizit umgewandelt, die von einer Instanz des Ihr zugrunde liegenden Typ. Würden Sie nicht brauchen, if/else-Anweisungen oder wirft übergeben
Color
- Instanz an die Methode akzeptiertColor?
, die Laufzeit wird dies für Sie tun. Das gleiche gilt für die Weitergabenull
Werte.null
den anderen Weg-Objekt zu tun, als Sie müssen und sind immer mit einem gültigen Wert ungleich null, die in Ihrer Art. DieNullable<>
- Typ ist derzeit der nächstgelegene Lösung für Ihre situation - für jetzt. Ich würde froh sein zu sehen, ob dies verbessern kann, in irgendeiner Weise für die ZukunftNullReferenceException
.Farbe ist eine Struktur (einen Wert geben). So können Sie eine null-Werte zulässt um dieses Problem zu lösen.
Ich würde inverse der Reihenfolge Ihrer Parameter und stellen Sie die parameter "Farbe" null-Werte zulässt und optional. wie diese:
dann sind Sie einfach nicht den parameter, wenn Sie nicht verwenden es:
Du könnte verwenden Sie eine null-Color-parameter, optionale parameter oder die Methode überladen. Alle sind code smells obwohl. Was Sie wirklich tun, ist die Bereitstellung von zwei Arten von API-Funktionen:
So erstellen Sie die zwei Methoden, mit Eigennamen, die erklären, die verschiedenen Funktionen, die Sie durchführen.