好的,我放弃了,你怎么在一行做到这一点?
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
...
}
答案 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()));