я в настоящее время этот тип кода:C#: Кастинг типы динамически
private void FillObject(Object MainObject, Foo Arg1, Bar Arg2)
{
if (MainObject is SomeClassType1)
{
SomeClassType1 HelpObject = (SomeClassType1)MainObject;
HelpObject.Property1 = Arg1;
HelpObject.Property2 = Arg2;
}
else if (MainObject is SomeClassType2)
{
SomeClassType2 HelpObject = (SomeClassType2)MainObject;
HelpObject.Property1 = Arg1;
HelpObject.Property2 = Arg2;
}
}
Предполагая, что SomeClassType1 и SomeClassType2 имеют одинаковый набор свойств, которые я хочу назначить (хотя они могут отличаться в остальных), является возможно ли динамически отличать MainObject к соответствующему типу, а затем назначать значение без дублирования кода? Это то, что я хотел бы видеть в конце:
private void FillObject(Object MainObject, Foo Arg1, Bar Arg2)
{
Type DynamicType = null;
if (MainObject is SomeClassType1)
{
DynamicType = typeof(SomeClassType1);
}
else if (MainObject is SomeClassType2)
{
DynamicType = typeof(SomeClassType2);
}
DynamicType HelpObject = (DynamicType)MainObject;
HelpObject.Property1 = Arg1;
HelpObject.Property2 = Arg2;
}
И, очевидно, C# жалуется не в состоянии найти DynamicType:
Тип или пространство имен имя «DynamicType» не может быть найден (вам не хватает директивы использования или ссылки на сборку?)
Возможно ли это в C# 2.0? Если это более грязно, чем мой текущий код, я не вижу смысла в этом, но мне очень интересно узнать. Благодаря!
EDIT: Просто для пояснения, я прекрасно понимаю, что реализация интерфейса является наиболее подходящим и, вероятно, правильным решением. Тем не менее, меня больше интересует, как я мог это сделать без реализации интерфейса. Спасибо за отличные ответы!
+1 Ницца ... Я бы не подумал использовать дженерики, я бы просто бросил в интерфейс. –
Как полезен здесь общий параметр T? Почему бы просто не использовать FillObject (главный объект IMyInterface, ...)? –
Мне любопытно - почему вы использовали дженерики в этом случае, а не только private void FillObject (IMyInterface MainObject, Foo Arg1, Bar Arg2)? –