大家好,我是否已经疯了(这不是问题)。我想将 List<string[]>
转换为 List<object[]>
。
List<string[]> parameters = GetParameters(tmpConn, name);
List<object[]> objParams = parameters.OfType<object[]>();
这种方法目前无法工作,但是除非我忘记了什么,使用此方法进行转换应该是可行的(不需要使用Lambda表达式)?
谢谢你的时间。
大家好,我是否已经疯了(这不是问题)。我想将 List<string[]>
转换为 List<object[]>
。
List<string[]> parameters = GetParameters(tmpConn, name);
List<object[]> objParams = parameters.OfType<object[]>();
这种方法目前无法工作,但是除非我忘记了什么,使用此方法进行转换应该是可行的(不需要使用Lambda表达式)?
谢谢你的时间。
你想要使用类似于以下代码:
List<object[]> objParams = parameters.OfType<object[]>().ToList();
或者在 C# 4.0 中,只需
List<object[]> objParams = parameters.ToList<object[]>();
或者List<object[]> objParams = parameters.ConvertAll(s => (object[])s);
由于数组协变,在.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>());
然后,您可以使用几乎任何类型的实例替换每个内部数组的元素。
IEnumerable<string[]>
,而不是 List<object[]>
。
Enuemrable.OfType
过滤掉了任何无效的转换。你可能需要考虑使用 Enumerable.Cast
,如果出现错误会引发异常。如果 string[]
没有继承自 object[]
(我真的不记得了),则可能需要调用 Enumerable.Select
进行转换。这样做怎么样?
List<string[]> sList = new List<string[]> {new []{"A", "B"}};
List<object[]> oList = sList.Cast<object[]>().ToList();
var
,为什么在这种情况下var
起着至关重要的作用 - 我想答案是它正在为我执行强制转换ToList()
。真的很棒...感谢你的时间。 - MoonKnightvar
,您可以使用List<object[]> result = parameters.ToList<object[]>();
,所以我不确定您原来的尝试出了什么问题。 - Ani