Ich ziehe varchar
Werte aus einer Datenbank und möchte die, denen string
ich sie zuweise, als "" festlegen, wenn dies der Fall ist null
. Ich mache es gerade so:
if (string.IsNullOrEmpty(planRec.approved_by) == true)
this.approved_by = "";
else
this.approved_by = planRec.approved_by.toString();
Es scheint eine Möglichkeit zu geben, dies in einer einzigen Zeile zu tun, etwa:
this.approved_by = "" || planRec.approved_by.toString();
Ich kann jedoch keinen optimalen Weg finden, dies zu tun. Gibt es einen besseren Weg oder habe ich den besten Weg, dies zu tun?
c#
.net
null
variable-assignment
Splashlin
quelle
quelle
Antworten:
Versuche dies:
this.approved_by = IsNullOrEmpty(planRec.approved_by) ? "" : planRec.approved_by.toString();
Sie können auch den Null-Koaleszenz-Operator verwenden, wie andere gesagt haben - da hier niemand ein Beispiel angegeben hat, das mit Ihrem Code funktioniert, ist eines:
this.approved_by = planRec.approved_by ?? planRec.approved_by.toString();
Dieses Beispiel funktioniert jedoch nur, da ein möglicher Wert für
this.approved_by
mit einem der potenziellen Werte identisch ist, auf die Sie ihn festlegen möchten. In allen anderen Fällen müssen Sie den bedingten Operator verwenden, wie ich in meinem ersten Beispiel gezeigt habe.quelle
if (planRec.approved_by == null) { this.approved_by = planRec.approved_by.toString(); //<= nullref } else { this.approved_by = planRec.approved_by;}
. Wenn ich falsch liege, weisen Sie bitte auf den Fehler hin.this.approved_by = planRec.approved_by?.toString() ?? "";
<- Das ist der nullbedingte Operator, und ich glaube nicht, dass es ihn gab, als diese Frage zum ersten Mal gestellt und beantwortet wurde. Hoffentlich sieht OP das, damit er seinen 7 Jahre alten Code von vor zwei Jobs überarbeiten kann :).Der Koaleszenzoperator (??) ist genau das, was Sie wollen, glaube ich.
quelle
Sie suchen den C # -Koaleszenzoperator: ??. Dieser Operator verwendet ein linkes und ein rechtes Argument. Wenn die linke Seite des Operators null oder nullbar ohne Wert ist, wird das rechte Argument zurückgegeben. Andernfalls wird die linke Seite zurückgegeben.
var x = somePossiblyNullValue ?? valueIfNull;
quelle
Ich vermute, das Beste, was Sie sich einfallen lassen können, ist
this.approved_by = IsNullOrEmpty(planRec.approved_by) ? string.Empty : planRec.approved_by.ToString();
Da Sie auf die Tatsache hinweisen, dass
approved_by
es sich um eine handeltobject
(die nicht gleich "" sein kann), wird dies natürlich als neu geschriebenthis.approved_by = (planRec.approved_by ?? string.Empty).ToString();
quelle
Mit C # 6 gibt es einen etwas kürzeren Weg für den Fall, dass planRec.approved_by keine Zeichenfolge ist:
this.approved_by = planRec.approved_by?.ToString() ?? "";
quelle
Verwenden Sie den C # -Koaleszenzoperator: ??
// if Value is not null, newValue = Value else if Value is null newValue is YournullValue var newValue = Value ?? YourNullReplacement;
quelle
Ab C # 8.0 können Sie den Code des Formulars mit dem Operator ?? = ersetzen
if (variable is null) { variable = expression; }
mit folgendem Code:
Weitere Informationen finden Sie hier
quelle
Um die Antwort von @ Dave zu erweitern ... wenn planRec.approved_by bereits eine Zeichenfolge ist
this.approved_by = planRec.approved_by ?? "";
quelle
Um eine nicht leere Variable zuzuweisen, ohne den tatsächlichen Variablennamen zu wiederholen (und ohne etwas zuzuweisen, wenn die Variable null ist!), Können Sie eine kleine Hilfsmethode mit einem
Action
Parameter verwenden:public static void CallIfNonEmpty(string value, Action<string> action) { if (!string.IsNullOrEmpty(value)) action(value); }
Und dann benutze es einfach:
CallIfNonEmpty(this.approved_by, (s) => planRec.approved_by = s);
quelle
Sie können dies auch in Ihrer Abfrage tun, z. B. in SQL Server-, Google-
ISNULL
undCASE
integrierten Funktionen.quelle
Ich benutze die Erweiterungsmethode SelfChk
static class MyExt { //Self Check public static void SC(this string you,ref string me) { me = me ?? you; } }
Dann benutze gerne
string a = null; "A".SC(ref a);
quelle