c# - 从父类型列表中获取派生类型

标签 c# inheritance

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

class ExamValidationResult : ValidationResult
class ApplicationValidationResult : ValidationResult

我正在使用 Windows 工作流来调用最终将返回验证结果的工作流:

var validationResults = (List<ValidationResult>)workflowInvoker.Invoke(args)["Result"];

一旦调用此方法,它将返回前面两种对象类型的列表。 例如。 (因为它出现在 Visual Studio 2013 中,这只是列表中的一项)

enter image description here

对象中底部的四个属性默认为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/

相关文章:

c++ - "Inherit"无法访问基类成员变量的 move 操作

javascript - 检查对象是否是集合/可迭代的?

c# - 通用接口(interface)继承(设计问题)

C# redis vs mongodb 性能

c# - 使用递归获取整数中的位数

c# - linq中的子串

javascript - React 高阶元素 - 传递 Prop 可以走多远

c# - 在来自不同 API 的 IndetityServer4 中使用 ConfigurationDbContext

c# - GridView ASP.NET C# 中的丑陋时间格式

c++ - 有没有办法专门化继承对象的一般方法