2010-08-04 19 views
6

String.IsNullOrEmpty() parece ser un método muy bien utilizado y me parece desear que haya alguna forma abreviada de hacerlo. Algo así como ???, ya que se usaría en un contexto similar al operador de fusión nulo, pero se extendería para probar tanto cadenas vacías como nulas. Es decir.¿Hay un caso para un operador String.IsNullOrEmpty?

string text = something.SomeText ??? "Not provided"; 

¿Cuáles serían sus opiniones sobre esto? ¿Inflaría innecesariamente el idioma? ¿Abriría las compuertas para que otras operaciones de nivel medio tuvieran una integración tan profunda con el compilador? O sería una adición útil para el lenguaje.

+7

¿No se opuso a la idea, pero temía la idea de?, ??, ????, ?????, ??????, ??????? etc. – taylonr

+3

¿Qué logra? el propósito de un lenguaje no es combinar cada enunciado en una sola línea ... ¿o no? Imagine programas de una sola línea ... –

+0

El lenguaje C# tiene un montón de conocimiento especial de 'String' (vea cómo' "string" + "concatenation" + "works" ') –

Respuesta

15

Phil Haack blogged about this hace un tiempo. Básicamente, sugiere un método de extensión en string que le permite hacer

var text = someString.AsNullIfEmpty() ?? "Not provided."; 

El método de extensión es muy simple:

public static string AsNullIfEmpty(this string str) 
{ 
    return !string.IsNullOrEmpty(str) ? str : null; 
} 

También sugiere una versión de la comprobación de los espacios en blanco en lugar de sólo vacío con el método string.IsNullOrWhitespace() de .NET 4, así como extensiones similares para la interfaz IEnumerable<T>.

También habla sobre la introducción de nuevos operadores como ??? para esto, pero concluye que sería más confuso que útil - después de todo, la introducción de estos métodos de extensión puede hacer lo mismo, pero es más legible y está usando sintaxis abreviada que "todo el mundo sabe".

+0

El problema es que, como desarrolladores, nos obsesionamos con estas geeks. Pregúntese: "¿Esto ayudará a los usuarios de este software?", "¿Hará esto una mejor rentabilidad para la compañía que usa este software"? –

+0

si desea introducir un nuevo método de extensión, tal vez esta versión expresará intenciones más claras StringExtensions estáticos de clase { cadena estática ValueOrDefault público (este valor de cadena, cadena de defaultValue) { retorno String.IsNullOrEmpty (valor)? valor por defecto: valor; } } – desco

+0

@Mitch: la razón principal para introducir estos métodos de extensión no es (solo) hacer que este código se vea bien, sino también para reducir la repetición del código. ¿Cuántas veces ha deseado comprobar una cadena de 'nulo ', vacío o en blanco, y proporcionar un valor predeterminado si es necesario? Lo hago todo el tiempo. Y con estos métodos de extensión, * ahorro tiempo cuando escribo software *, lo que beneficia (al menos) a la empresa para la que escribo el software. –

6

Phil Haack habla sobre esta operación exacta en su blog. Debería echar un vistazo a su artículo Null Or Empty Coalescing.

Los operadores de propósito especial como ??? tienen una pendiente resbaladiza. ¿Por qué detenerse aquí? ¿Por qué no introducir un operador "nulo o vacío o en blanco": ????. Phil habla de esto, en realidad, en su artículo. Su conclusión general es que tales operadores serían más confusos que útiles.

En última instancia, podría tomar muchas operaciones diferentes para que un operador de inventos las represente; desafortunadamente, eso probablemente destruiría la legibilidad del idioma.

+0

Suspiro ... solo porque quería escribir un par de ejemplos, ¡me ganaste en menos de un minuto ...! ;) –

+0

@Tomas: No parece haber dañado tu puntaje en esta pregunta. Buen trabajo. – LBushkin

Cuestiones relacionadas