我现在有这种类型的代码: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中可能会这样吗?如果它比我现在的代码更混乱,比我认为这样做没有意义,但我很有兴趣了解。谢谢!
编辑:只是为了澄清,我完全理解,实现一个接口是最合适的,可能是正确的解决方案。也就是说,我更感兴趣的是如何在没有实现接口的情况下做到这一点。感谢您的好评!
我认为这里的泛型更合适,但至少我会检查以确保属性存在第一。 – 2009-02-19 18:25:47
我只是想展示你用反射的方式。对于这个问题,这不是*完整*或*推荐*方法。 – 2009-02-19 18:28:04
我觉得这个灾难已经写满了...... – 2009-02-19 18:29:45