C# 从父类型列表获取派生类型

C# 从父类型列表获取派生类型,c#,inheritance,C#,Inheritance,给定以下两种类类型,它们都是内置ValidationResult类的派生类: class ExamValidationResult : ValidationResult class ApplicationValidationResult : ValidationResult 我正在使用windows工作流调用最终将返回验证结果的工作流: var validationResults = (List<ValidationResult>)workflowInvoker.Invoke(ar

给定以下两种类类型,它们都是内置ValidationResult类的派生类:

class ExamValidationResult : ValidationResult
class ApplicationValidationResult : ValidationResult
我正在使用windows工作流调用最终将返回验证结果的工作流:

var validationResults = (List<ValidationResult>)workflowInvoker.Invoke(args)["Result"];
var validationResults=(List)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
    }
}

只需尝试将每个结果转换为所需类型:

foreach (var result in validationResults)
{
    var examVR = result as ExamValidationResult;
    if (examVR != null)
        //it's ExamValidationResult
    else
        //do the same check for ApplicationValidationResult
}

看一看为什么要将其回滚?@SergRogovtsev每个类中都有我想要访问的某些属性,而我无法从ValidationResult类型访问这些属性。调用工作流后,我不想访问它。但是,如果您想使用某个类型的属性,您知道您希望使用的类型。这意味着您可以将
用作
。我不能,在问题中我说过列表包含两种不同的对象类型(转换回父类型),我如何确定哪种是哪种?