2015-03-11 4 views
0

je dois tableau un ensemble ad hoc de chaînes comme celui-ciQuelle est la façon la plus concise à la matrice une série de variables de chaîne qui peut être vide

string a = null; 
string b = "include me"; 
string c = string.Empty; 
string d = "me too!"; 

sans inclure les chaînes nulles ou vides. Je sais que je peux utiliser une fonction enfant et params:

private List<string> GetUniqueKeys(params string[] list) 
{ 
    var newList = new List<string>(); 
    foreach (string s in list) 
    { 
     if (!string.IsNullOrWhiteSpace(s)) 
      newList.Add(s); 
    } 
    return newList; 
} 

/// 

return this.GetUniqueKeys(a, b, c, d).ToArray(); 

mais est-il possible de faire plus simple ce que je ne vois pas?

EDIT: Désolé pour cela, heureux de voter le premier LINQer, mais j'aurais dû préciser que j'essayais de me débarrasser complètement de la méthode enfant, pas de la simplifier.

Répondre

3

Aucune fonction enfant

Le chemin le plus court, vous pouvez le faire sans fonction de l'enfant est la suivante:

var a = new string[] { a, b, c, d }.Where(s => !string.IsNullOrWhiteSpace(s)); 

avec fonction enfant

Cependant, je recommande d'utiliser votre fonction enfant:

private IEnumerable<string> GetUniqueKeys(params string[] list) 
{ 
    return list.Where(s => !string.IsNullOrWhitespace(s)); 
} 

Méthode d'extension

Sinon, si vous cherchez vraiment d'autres options ... vous pouvez créer une méthode d'extension:

public static List<string> AddIfNotEmpty(this List<string> list, params string[] items) 
{ 
    list.AddRange(items.Where(s => !string.IsNullOrEmpty(s))); 

    return list; 
} 

Utilisez ensuite comme par exemple:

var list = new List<string>().AddIfNotEmpty(a, b, c, d); 

Et ajouter d'autres articles plus tard:

list.AddIfNotEmpty("new item", string.Empty); 
0
private List<string> GetUniqueKeys(params string[] list) 
{ 
    var newList = new List<string>(); 
    newList.AddRange(list.Where(str => !string.IsNullOrEmpty(str))); 

    return newList; 
} 
4

Si les chaînes d'entrée sont énumérables, vous pouvez utiliser linq.

var result = stringList.Where(s => !string.IsNullOrWhiteSpace(s)).ToArray(); 
+1

évidemment, vous pouvez utiliser n'importe quel critère ici. –

+0

@lincoln S'il vous plaît voir edit - Je pensais être clair quand je disais "Je sais que je peux utiliser une fonction enfant ..." que j'espérais éviter tout à fait, mais je ne l'avais pas été. – downwitch

+0

@downwitch 'nouvelle chaîne [] {a, b, c, d}. Où (s =>! String.IsNullOrWhiteSpace (s))' –

0

Avec la méthode des enfants ..

private List<string> GetUniqueKeys(params string[] list) 
{ 
    return list.Where(x => !string.IsNullOrWhiteSpace(x)).ToList(); 
} 

Sans méthode enfant ..

string a = null; 
string b = "include me"; 
string c = string.Empty; 
string d = "me too!"; 

string[] lst = { a, b, c, d }; 
var uniqueLst = lst.Where(x => !string.IsNullOrWhiteSpace(x)).ToList(); //Or ToArray(); 

Je recommande d'utiliser la méthode de l'enfant avec params.