2010-08-04 13 views
6

String.IsNullOrEmpty() sembra essere un metodo estremamente ben utilizzato e mi trovo a desiderare che ci fosse una scorciatoia per questo. Qualcosa come ??? come sarebbe usato in un contesto simile all'operatore di coalesce nullo, ma essere esteso per testare stringhe vuote e null. CioèEsiste un caso per un operatore String.IsNullOrEmpty?

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

Quali sarebbero le vostre opinioni in merito? Batterebbe inutilmente la lingua? Aprerebbe le porte per consentire ad altre operazioni di medio livello di ottenere un'integrazione così profonda con il compilatore? O sarebbe un'aggiunta utile per la lingua.

+7

Non contrario all'idea, ma temono il pensiero di?, ???, ????, ?????, ??????, ??????? ecc – taylonr

+3

cosa ottiene? lo scopo di una lingua non è quello di combinare ogni affermazione su una singola riga ... o è vero? Immagina programmi a linea singola ... –

+0

Il linguaggio C# ha un sacco di conoscenze speciali 'String' (guarda come' "stringa" + "concatenazione" + "funziona" ') –

risposta

15

Phil Haack blogged about this qualche tempo fa. In sostanza, egli suggerisce un metodo di estensione su string che ti permette di fare

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

Il metodo di estensione è molto semplice:

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

Egli suggerisce anche una versione controllando per gli spazi bianchi invece di vuoto con il metodo string.IsNullOrWhitespace() da .NET 4, nonché estensioni simili per l'interfaccia IEnumerable<T>.

Parla anche di introdurre nuovi operatori come ??? per questo, ma conclude che sarebbe più confuso che utile - dopo tutto, introducendo questi metodi di estensione si può fare la stessa cosa, ma è più leggibile, e sta usando sintassi abbreviata che "tutti già sanno".

+0

Il problema è che, come sviluppatori, veniamo appesi a questi inseguimenti geniali. Chiediti: "questo aiuterà gli utenti di questo software", "questo renderà una linea di fondo migliore per la società che utilizza questo software" ??? –

+0

se si vuole introdurre nuovo metodo di estensione, forse questa versione esprimerà intenzioni più chiare StringExtensions classe statiche { pubblico stringa statica ValueOrDefault (questo valore di stringa, stringa defaultValue) { ritorno string.IsNullOrEmpty (valore)? defaultValue: valore; } } – desco

+0

@Mitch: La ragione principale per introdurre questi metodi di estensione non è (solo) per rendere questo codice un aspetto gradevole, ma anche per ridurre la ripetizione del codice. Quante volte ti sei trovato a voler controllare una stringa per 'null', vuoto o bianco, e fornire un valore predefinito se necessario? Lo faccio sempre. E con questi metodi di estensione, * risparmierò tempo quando scrivo software *, che avvantaggia (almeno) la società per cui scrivo software. –

6

Phil Haack parla di questa operazione esatta sul suo blog. Dovresti controllare il suo articolo Null Or Empty Coalescing.

Gli operatori per scopi speciali come ??? sono una pendenza scivolosa. Perché fermarsi qui - perché non introdurre un operatore "null o vuoto o spazio vuoto": ????. Phil parla di questo, in realtà, nel suo articolo. La sua conclusione generale è che tali operatori sarebbero più confusionari di utili.

In definitiva si potrebbero eseguire molte operazioni diverse e inventare operatori per rappresentarli - sfortunatamente, questo probabilmente distruggerebbe la leggibilità della lingua.

+0

Sigh ... solo perché volevo scrivere un paio di esempi, mi hai battuto per meno di un minuto ...! ;) –

+0

@Tomas: Non è sembrato danneggiare il tuo punteggio in questa domanda. Bel lavoro. – LBushkin

Problemi correlati