0

このようなアドホックな文字列セットを配列する必要があります

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

null または空の文字列を含めません。私は子関数を使用できることを知っています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();

しかし、私が見ていないこれを行う簡単な方法はありますか?

編集: 申し訳ありませんが、最初の LINQer に投票して喜んでいますが、単純化するのではなく、子メソッドを完全に取り除こうとしていることを指定する必要がありました。

4

4 に答える 4

3

子機能なし

子関数なしでこれを行う最短の方法は次のとおりです。

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

子機能付き

ただし、子関数を使用することをお勧めします。

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

延長方法

または、他のオプションを本当に探している場合は...拡張メソッドを作成できます。

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

    return list;
}

次に、次のように使用します。

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

後で他の項目を追加します。

list.AddIfNotEmpty("new item", string.Empty);
于 2015-03-11T02:00:14.797 に答える
0

子メソッドで..

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

子メソッドなし..

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();

で子メソッドを使用することをお勧めしますparams

于 2015-03-11T02:12:43.707 に答える