0

私はこれをやっています。

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認識しないため、これは飛行しません。匿名タイプなので、私もできません。私に何ができる?OuterInneras

私はまた、「それはコンボのようなものだ」と言うか、Objectまたは何かを使用したくないです。varTuple<Type1,Type2>

NB。この議論がありますが、それは私の質問に本当に答えません。そして、これではフィールドを取得できません。

4

2 に答える 2

4

var代わりにforobjectをループで使用することにより、匿名タイプを正しく使用できるはずです。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));
于 2013-01-15T21:45:28.180 に答える
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") });
于 2013-01-15T21:56:36.870 に答える