所有,我精神崩溃了(这不是问题)。我想将List<string[]>
转换为List<object[]>
List<string[]> parameters = GetParameters(tmpConn, name);
List<object[]> objParams = parameters.OfType<object[]>();
这不起作用,但除非我忘记使用此方法进行转换(不需要Lambdas)?
感谢您的时间。
答案 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();