如何在C#3.0的一行中将object []转换为List <string>?</string>

时间:2009-05-15 13:06:18

标签: c# generics list casting

好的,我放弃了,你怎么在一行做到这一点?

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
    ...
}

6 个答案:

答案 0 :(得分:47)

你在使用C#3.0和LINQ吗?这很简单:

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

答案 1 :(得分:16)

如果您有LINQ可用(在.NET 3.5中)和C#3.0(对于扩展方法),那么有一个很好的一个班轮:

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

你不会比你为.NET 2.0 / C#2.0发布的内容更短。

警告:我刚刚意识到您的object[]不一定是string类型。如果事实确实如此,请使用Matt Hamilton的方法,这样可以很好地完成工作。如果数组的元素实际上是string类型,那么我的方法当然会有效。

答案 2 :(得分:9)

C#2.0:

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

答案 3 :(得分:4)

另一个可能正确的变体:

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

这将过滤掉原始列表中不是string个对象的任何对象,而不是抛出异常或尝试将它们全部转换为字符串。

答案 4 :(得分:3)

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

这会将object类型的数组转换为string数组。您可以通过更改lambda表达式转换为其他类型的数组。

答案 5 :(得分:2)

虽然不是关于List&lt;&gt;的单线程声明,在不要求Linq的情况下给你同样的效果。

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