C#List <string []> to List <object []> Conversion </object []> </string []>

时间:2012-06-22 18:49:56

标签: c# type-conversion

所有,我精神崩溃了(这不是问题)。我想将List<string[]>转换为List<object[]>

List<string[]> parameters = GetParameters(tmpConn, name);
List<object[]> objParams = parameters.OfType<object[]>();

这不起作用,但除非我忘记使用此方法进行转换(不需要Lambdas)?

感谢您的时间。

4 个答案:

答案 0 :(得分:18)

你想使用类似的东西:

List<object[]> objParams = parameters.OfType<object[]>().ToList();

或在C#4.0中,只是

List<object[]> objParams = parameters.ToList<object[]>();

List<object[]> objParams = parameters.ConvertAll(s => (object[])s);

答案 1 :(得分:3)

OfType<string[]>会返回IEnumerable<string[]>,而不是List<object[]>

Enuemrable.OfType过滤掉任何无效的演员表。您可能需要考虑Enumerable.Cast,如果您犯了错误,将会抛出。如果string[]未从object[]继承(我真的不记得了),您可能需要致电Enumerable.Select以提供转化。

你肯定需要在某处进行Enumerable.ToList调用。

答案 2 :(得分:3)

由于数组协方差,在.NET 4.0中,您可以这样做:

// Works because:
// a) In .NET, a string[] is an object[]
// b) In .NET 4.0, an IEnumerable<Derived> is an IEnumerable<Base>              
var result = parameters.ToList<object[]>();

但是请注意,你不能用字符串之外的任何东西来改变那些数组(因为数组协方差不是真正安全的)。

如果你想要真正灵活的可写对象数组,你可以这样做:

var result = parameters.Select(array => array.ToArray<object>())
                       .ToList();

(或)

var result = parameters.ConvertAll(array => array.ToArray<object>());

然后你可以用你喜欢的任何类型的实例替换每个内部数组的元素。

答案 3 :(得分:0)

这样做怎么样

List<string[]> sList = new List<string[]> {new []{"A", "B"}};
List<object[]> oList = sList.Cast<object[]>().ToList();