Estoy sacando varchar
valores de una base de datos y quiero establecer el string
que los estoy asignando como "" si lo están null
. Actualmente lo estoy haciendo así:
if (string.IsNullOrEmpty(planRec.approved_by) == true)
this.approved_by = "";
else
this.approved_by = planRec.approved_by.toString();
Parece que debería haber una forma de hacer esto en una sola línea, algo como:
this.approved_by = "" || planRec.approved_by.toString();
Sin embargo, no puedo encontrar una forma óptima de hacer esto. ¿Existe una mejor manera o es la que tengo la mejor manera de hacerlo?
c#
.net
null
variable-assignment
Splashlin
fuente
fuente
Respuestas:
Prueba esto:
this.approved_by = IsNullOrEmpty(planRec.approved_by) ? "" : planRec.approved_by.toString();
También puede usar el operador de fusión nula como han dicho otros, ya que nadie ha dado un ejemplo que funcione con su código, aquí hay uno:
this.approved_by = planRec.approved_by ?? planRec.approved_by.toString();
Pero este ejemplo solo funciona ya que un valor posible para
this.approved_by
es el mismo que uno de los valores potenciales al que desea establecerlo. Para todos los demás casos, deberá usar el operador condicional como mostré en mi primer ejemplo.fuente
if (planRec.approved_by == null) { this.approved_by = planRec.approved_by.toString(); //<= nullref } else { this.approved_by = planRec.approved_by;}
. Si me equivoco, indique el error.this.approved_by = planRec.approved_by?.toString() ?? "";
<- Ese es el operador condicional nulo, y no creo que existiera cuando esta pregunta se hizo y respondió por primera vez. Con suerte, OP ve esto, para poder refactorizar su código de 7 años, de hace dos trabajos :)El operador de unión (??) es lo que quieres, creo.
fuente
Está buscando el operador de fusión de C #: ??. Este operador toma un argumento de izquierda y derecha. Si el lado izquierdo del operador es nulo o anulable sin valor, devolverá el argumento derecho. De lo contrario, volverá a la izquierda.
var x = somePossiblyNullValue ?? valueIfNull;
fuente
Supongo que lo mejor que se te ocurre es
this.approved_by = IsNullOrEmpty(planRec.approved_by) ? string.Empty : planRec.approved_by.ToString();
Por supuesto, dado que está insinuando el hecho de que
approved_by
es unobject
(que no puede ser igual a ""), esto se reescribirá comothis.approved_by = (planRec.approved_by ?? string.Empty).ToString();
fuente
Con C # 6 hay una forma un poco más corta para el caso donde planRec.approved_by no es una cadena:
this.approved_by = planRec.approved_by?.ToString() ?? "";
fuente
Utilice el operador de fusión de C #: ??
// if Value is not null, newValue = Value else if Value is null newValue is YournullValue var newValue = Value ?? YourNullReplacement;
fuente
Comenzando con C # 8.0, puede usar el operador ?? = para reemplazar el código del formulario
if (variable is null) { variable = expression; }
con el siguiente código:
Más información está aquí
fuente
Para extender la respuesta de @ Dave ... si planRec.approved_by ya es una cadena
this.approved_by = planRec.approved_by ?? "";
fuente
Para asignar una variable no vacía sin repetir el nombre de la variable real (¡y sin asignar nada si la variable es nula!), Puede usar un pequeño método auxiliar con un
Action
parámetro:public static void CallIfNonEmpty(string value, Action<string> action) { if (!string.IsNullOrEmpty(value)) action(value); }
Y luego solo úsalo:
CallIfNonEmpty(this.approved_by, (s) => planRec.approved_by = s);
fuente
También puede hacerlo en su consulta, por ejemplo en sql server, google
ISNULL
yCASE
funciones integradas.fuente
Yo uso el método de extensión SelfChk
static class MyExt { //Self Check public static void SC(this string you,ref string me) { me = me ?? you; } }
Entonces usa like
string a = null; "A".SC(ref a);
fuente