わかりました、あきらめます。これをどのように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
...
}
LINQでC#3.0を使用していますか?それはそれからかなり簡単です:
List<string> fields = values.Select(i => i.ToString()).ToList();
利用可能な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
である場合、私のメソッドはもちろん機能します。
C#2.0:
List<string> stringList = new List<string>(Array.ConvertAll<object,string>(values, new Converter<object,string>(Convert.ToString)));
正しいと思われるもう1つのバリアント:
List<string> list = values.OfType<string>().ToList();
これにより、例外をスローしたり、それらをすべて文字列に変換したりする代わりに、string
オブジェクトではない、元のリスト内のオブジェクトをすべて除外します。
Array.ConvertAll(inputArray, p => p.ToString())
これは、object
タイプの配列をstring
の配列に変換します。ラムダ式を変更することで、他のタイプの配列に変換できます。
List <>宣言に関して1つのライナーではありませんが、Linqを必要とせずに同じ効果が得られます。
List<string> list = new List<string>();
Array.ForEach(values, value => list.Add(value.ToString()));