使用反射动态转换对象

时间:2016-08-08 11:47:44

标签: c# reflection

我有一个不同类型的对象列表,我需要根据它们的类型做不同的事情。具体来说,两种类型共享一种方法,我想用它们中的任何一种。我目前正在尝试的是:

if (foo is Type01 || foo is Type02) {
    Type tempType = foo.GetType();
    outList.Add((foo as tempType).ToOutType());
    return outList;
}
然而,这并不起作用,因为编译器显然不能动态地使用Type。有没有办法实现这一点,还是我必须将两个选项放在不同的if子句中?

1 个答案:

答案 0 :(得分:2)

如果您同时控制Type01Type02,则需要救援接口:

interface ISupportToOutType
{
    OutType ToOutType();
}

class Type01 : ISupportToOutType
{        
}

class Type02 : ISupportToOutType
{        
}

var toOutType = foo as ISupportToOutType;
if(toOutType != null)
{
    outList.Add(toOutType.ToOutType());
}