web-dev-qa-db-ja.com

C#3.0の1行でobject []をList <string>に変換する方法は?

わかりました、あきらめます。これをどのように1行で行うのですか?

public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
    //List<string> fields = values.ToList<string>();
    //List<string> fields = values as List<string>;
    //List<string> fields = (List<string>)values;

    List<string> fields = new List<string>();
    foreach (object value in values)
    {
        fields.Add(value.ToString());
    }

    //process the fields here knowning they are strings
    ...
}
16
Edward Tanguay

LINQでC#3.0を使用していますか?それはそれからかなり簡単です:

List<string> fields = values.Select(i => i.ToString()).ToList();
48
Matt Hamilton

利用可能なLINQ(.NET 3.5)とC#3.0(拡張メソッド用)がある場合、かなり良い1つのライナーがあります。

var list = values.Cast<string>().ToList();

.NET 2.0/C#2.0に投稿したものよりもずっと短くなることはありません。

警告:私はあなたのobject[]は必ずしもstring型ではありません。それが実際に当てはまる場合は、うまく機能するMatt Hamiltonの方法を使用してください。配列の要素が実際にタイプstringである場合、私のメソッドはもちろん機能します。

16
Noldorin

C#2.0:

List<string> stringList = new List<string>(Array.ConvertAll<object,string>(values, new Converter<object,string>(Convert.ToString)));
9
Crispy

正しいと思われるもう1つのバリアント:

List<string> list = values.OfType<string>().ToList();

これにより、例外をスローしたり、それらをすべて文字列に変換したりする代わりに、stringオブジェクトではない、元のリスト内のオブジェクトをすべて除外します。

4
Array.ConvertAll(inputArray, p => p.ToString())

これは、objectタイプの配列をstringの配列に変換します。ラムダ式を変更することで、他のタイプの配列に変換できます。

3
Suresh Deevi

List <>宣言に関して1つのライナーではありませんが、Linqを必要とせずに同じ効果が得られます。

List<string> list = new List<string>();
Array.ForEach(values, value => list.Add(value.ToString()));
2
Pat