У меня есть следующие три класса
public class Base
{
string name;
}
public class Foo : Base
{
int value;
}
public class Bar : Base
{
double value;
}
Это то, что я пытаюсь
Base current = null;
if (somecondition)
current = new Foo();
else
current = new Bar();
for (int i=0; i<5; i++)
{
current.value = i;
}
Проблема в том, что VS 2010 показывает ошибку в теле цикла, поскольку Base
не имеет свойства value
.
Теперь я мог бы обойти эту проблему следующим образом:
Base current = null;
bool isBar = true;
if (somecondition)
{
current = new Foo();
isBar = false;
}
else
current = new Bar();
for (int i=0; i<5; i++)
{
if (isBar)
(current as Bar).value = i;
else
(current as Foo).value = i;
}
Но я надеялся на лучшее решение, потому что как только цикл начинает итерацию, тип current
не изменится, но я собираюсь протестировать тип и, соответственно, привести его к каждой итерации.
Каков был бы правильный способ сделать это?