我正在这样做。
List<Type1> t1 = ...
List<Type2> t2 = ...
List<Type3> t3 = new List<Type3>();
for(int i = 0; i < t1.Count; i++)
t3.AddRange(new Type3(t1[i], t2[i]));
我尝试通过部署此代码来使用foreach
。
IEnumerable<Type1> t1 = ...
IEnumerable<Type2> t2 = ...
IEnumerable<Object> t12 = t1.Zip(t2, (outer, inner)
=> new{ Outer = outer, Inner = inner});
List<Type3> t3 = new List<Type3>();
foreach(Object element in t12)
t3.Add(new Type3(element.Outer, element.Inner));
由于Object
无法识别Outer
和Inner
属性,因此无效。我也不能as
,因为它是匿名类型。我该怎么办?
我也不想使用Object
或var
,而是使用Tuple
或者说“这是<Type1,Type2>
组合类型的东西”。
答案 0 :(得分:4)
您应该能够在循环中使用var
代替object
来正确使用匿名类型。 var
推断出类型,并允许您按预期使用匿名对象。
IEnumerable<Type1> t1 = ...
IEnumerable<Type2> t2 = ...
var t12 = t1.Zip(t2, (outer, inner)
=> new{ Outer = outer, Inner = inner});
List<Type3> t3 = new List<Type3>();
foreach(var element in t12)
t3.Add(new Type3(element.Outer, element.Inner));
如果您想使用Tuple
,可以执行以下操作:
IEnumerable<string> t1 = new[] { "test" };
IEnumerable<int> t2 = new[] { 1 };
IEnumerable<Tuple<string, int>> t3 = t1.Zip(t2, (outer, inner) => Tuple.Create(outer, inner));
答案 1 :(得分:0)
也许是这样的:
IEnumerable<int> t1 = new List<int> { 1, 2, 3 };
IEnumerable<int> t2 = new List<int> { 1, 2, 3 };
var t12 = t1.Zip(t2, (outer, inner) => new { Outer = outer, Inner = inner });
var t3 = t12.Select(t => new { O = t.GetPropValue("Outer"),
I = t.GetPropValue("Inner") });