给定以下两个类类型,它们都是内置 ValidationResult 类的派生类:
class ExamValidationResult : ValidationResult
class ApplicationValidationResult : ValidationResult
我正在使用 Windows 工作流来调用最终将返回验证结果的工作流:
var validationResults = (List<ValidationResult>)workflowInvoker.Invoke(args)["Result"];
一旦调用此方法,它将返回前面两种对象类型的列表。 例如。 (因为它出现在 Visual Studio 2013 中,这只是列表中的一项)
对象中底部的四个属性默认为ValidationResult类,但是可以看到派生类型是在顶部定义的。
对于 ApplicationValidationResult,这看起来完全一样。 所以我的问题是我怎样才能将它们转换回它们的派生类型而必须手动告诉它。 (我无法有效地做到这一点,因为该列表将包含两种不同的派生类型。)
最佳答案
您可以使用 typeof(yourobject)
或 yourobject.getType()
来确定对象的运行时类型。
所以它看起来像这样:
foreach(var r in validationResults) {
if(r == null) continue;
else if(r.getType() == typeof(ExamValidationResult)) {
//do something
} else if(r.getType() == typeof(ApplicationValidationResult)) {
//do something else
} else {
//should never happen
}
}
关于c# - 从父类型列表中获取派生类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32910478/