让我说我有这个:
public class test
{
int foo;
int foo2;
string foo3;
}
int[] foo = new int[] { 1, 2, 3 };
int[] foo2 = new int[] { 4, 5, 6 };
string[] foo3 = new string[] { "a", "b", "c" };
如何将这3个数组转换为IEnumberable of test?
TIA
/拉塞
答案 0 :(得分:8)
您可以使用.NET 4.0 Enumerable.Zip
扩展方法:
foo.Zip(foo2, (first, second) => new { first, second })
.Zip(foo3, (left, right) => new test
{
foo = left.first,
foo2 = left.second,
foo3 = right
});
或者写一个执行此操作的方法:
public static IEnumerable<test> FooCombiner(int[] foo,
int[] foo2, string[] foo3)
{
for (int index = 0; index < foo.Length; index++)
{
yield return new test
{
foo = foo[index],
foo2 = foo2[index],
foo3 = foo3[index]
};
}
}
最后一个例子是最易读的IMO。
答案 1 :(得分:5)
public static IEnumerable<test> Test(int[] foo, int[] foo2, string[] foo3)
{
// do some length checking
for (int i = 0; i < foo.Length; i++)
{
yield return new test()
{
foo = foo[i],
foo2 = foo2[i],
foo3 = foo3[i]
};
}
}
您可以添加一些长度检查或使用foreach进行,但我认为想法已经显示
答案 2 :(得分:2)
如果您不喜欢循环,可以使用此代码:
List<test> result = Enumerable.Range(0, foo.Length).Select(i => new test() { foo = foo[i], foo2 = foo2[i], foo3 = foo3[i] }).ToList();