c# - 如何在 LINQ 中通过索引连接两个集合

标签 c# linq collections join

什么是与以下代码等效的 LINQ?

string[] values = { "1", "hello", "true" };
Type[] types = { typeof(int), typeof(string), typeof(bool) };

object[] objects = new object[values.Length];

for (int i = 0; i < values.Length; i++)
{
    objects[i] = Convert.ChangeType(values[i], types[i]);
}

最佳答案

.NET 4 有一个 Zip 运算符,可让您将两个集合连接在一起。

var values = { "1", "hello", "true" };
var types = { typeof(int), typeof(string), typeof(bool) };
var objects = values.Zip(types, (val, type) => Convert.ChangeType(val, type));

.Zip 方法优于 .Select((s, i) => ...) 因为当您的集合没有相同数量的元素时 .Select 会抛出异常,而 .Zip 只会压缩尽可能多地组合元素。

如果您使用的是 .NET 3.5,那么您将不得不接受 .Select,或者编写您自己的 .Zip 方法。

话虽如此,我从未使用过 Convert.ChangeType。我假设它适用于您的场景,所以我将保留它。

关于c# - 如何在 LINQ 中通过索引连接两个集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2289566/

相关文章:

c# - Linq,array.Contains() 生成异常 : Only primitive types ('such as Int32, String, and Guid' ) are supported in this context

java - 如何在 Java 中同步未同步的集合

c# - XmlSerializer 反序列化具有不同元素名称的列表

c# - 使用 BouncyCaSTLe 在证书请求中指定证书模板

.net - 从表达式中获取类名和属性名 () => MyClass.Name

c# - WHERE 语句在使用 It.IsAny 的单元测试中不起作用

java - 从 List<Integer> 中正确删除 Integer

javascript - 如何在javascript中将集合转换为数组

c# - 如何从 http 服务器下载需要引用才能允许下载的文件?

c# - 为什么 C# 中的 IEnumerator<T> 需要两个 Current 方法?