独立して繰り返し処理する場合は、追加の作業を行いません。
class Program
{
private void Test(object inputs)
{
if (inputs is List<TypeA>)
loop((List<TypeA>) inputs);
if (inputs is List<TypeB>)
loop((List<TypeB>)inputs);
}
private void loop(IEnumerable<TypeA> inputs)
{
foreach (var input in inputs)
{
logic(input.i);
}
}
private void loop(IEnumerable<TypeB> inputs)
{
foreach (var input in inputs)
{
logic(input.i);
}
}
private void logic(int i)
{
// magic happens here
}
}
class TypeA
{
public int i;
}
class TypeB
{
public int i;
}
しかし、世界のすべてのものの愛のために、これをしないでください。
あなたが実際にいくつかの理由で一度にリストを反復しなければならない、とあなたはテストのみTypeAsとTypeBsで呼び出されますを知って場合は、dynamic typeでこれを扱うことができます。
class Program
{
static void Main(string[] args)
{
var w = new TypeA {i = 8};
var x = new TypeA {i = 16};
var y = new TypeB {i = 32};
var z = new TypeC(); // don't pass this to Test!
var l = new List<dynamic> {w, x, y};
Test(l);
}
private static void Test(IEnumerable<dynamic> inputs)
{
foreach (var input in inputs)
{
logic(input.i);
}
}
private static void logic(int i)
{
// magic happens here
}
}
class TypeA
{
public int i;
}
class TypeB
{
public int i;
}
class TypeC {} // no members
'item'のタイプはどのようなものでしょうか?あなたはそれぞれの商品で何をしようとしていますか? –
@JonSkeetアイテムはTypeAまたはTypeBのいずれかになりますが、それらの間で共有される共通の値を取得するだけで済みます。私は、ベースクラスまたはインターフェイスw /を使用してこれを行うことができることを知っています:BaseClassしかし、私は別の方法があるかどうかを知りたいです。 – user3953989
各タイプの 'foreach'ループの中でどうやってやっていますか? –