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

Edw*_*uay 16 c# generics casting list

好吧,我放弃了,你怎么在一条线上做到这一点?

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
    ...
}
Run Code Online (Sandbox Code Playgroud)

Mat*_*ton 48

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

List<string> fields = values.Select(i => i.ToString()).ToList();
Run Code Online (Sandbox Code Playgroud)

  • 我没有看到对象数组实际上是一个字符串数组的任何地方.这个答案是正确的,因为即重复*正好*OP在单行中发布的内容. (4认同)
  • 如果你计算using指令,这在技术上是一个双线程:D (2认同)

Nol*_*rin 16

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

var list = values.Cast<string>().ToList();
Run Code Online (Sandbox Code Playgroud)

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

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

  • 很棒的答案 - 比linq选择简单得多. (2认同)

Cri*_*spy 9

C#2.0:

List<string> stringList = new List<string>(Array.ConvertAll<object,string>(values, new Converter<object,string>(Convert.ToString)));
Run Code Online (Sandbox Code Playgroud)