繁体   English   中英

C#通过强制转换访问子类方法

[英]C# accessing subclass method by casting

我有以下抽象类:

abstract class ContactQueue
{

    public abstract DateTime period { 
        get; set; }
    public abstract String type { get; set; }
    public abstract String toString();
}

现在,此类的子类之一是:

class GeneralPercentageQueue : ContactQueue
{
    public GeneralPercentageQueue(DateTime period)
    {
        this.period = period;
    }
    public int phone_answer_total {get; set;}
    public int phone_answer_percentage_8025 { get; set; }
    public int web_answer_percentage_8030 { get; set; }
    public int web_answer_percentage_total { get; set; }
    public int mail_answer_percentage { get; set; }
    public override DateTime period { get; set; }
    public override string type { get; set; }
    public override string toString()
    {
        return period.ToString();
    }
}

现在,由于我有多个抽象类的子类,因此我创建了一个列表,其中可以包含所有这些类,因此我想遍历该列表并访问特定字段之一来执行此操作,因此我尝试了以下操作:

foreach(ContactQueue cq in p.GetGeneralEmailPercentageData(start,end))
{
    foreach (ContactQueue contactqueue in finalDataList)
    {
        if (cq.period == contactqueue.period)
        {
           (GeneralPercentageQueue)contactqueue.mail_answer_percentage = (GeneralPercentageQueue)cq.mail_answer_percentage;
        }
    }
}

但是我收到错误消息,对象ContactQueue没有此类字段

那么我该如何访问呢?

您需要添加括号:

((GeneralPercentageQueue)contactqueue).mail_answer_percentage = ...;

正如其他人提到的那样,您缺少引起错误的括号。

相反,您可以使用OfType(T)将集合筛选为仅要比较的类型。

foreach(GeneralPercentageQueue cq in p.GetGeneralEmailPercentageData(start,end)
                                      .OfType<GeneralPercentageQueue>())
{
    foreach (GeneralPercentageQueue contactqueue in finalDataList.OfType<GeneralPercentageQueue>())
    {
        if (cq.period == contactqueue.period)
        {
            contactqueue.mail_answer_percentage = cq.mail_answer_percentage;
        }
    }
}

这将防止运行时类型不匹配的异常。

您需要添加括号,正在发生以下情况:

  1. contactqueue.mail_answer_percentage被调用
  2. 在contactqueue.mail_answer_percentage上调用强制类型转换以键入GeneralPercentageQueue

由于财产mail_answer_percentage不是类型的属性ContactQueue第一次调用失败,你会得到错误mail_answer_percentage不是一个属性ContactQueue

所以你的代码应该看起来像

((GeneralPercentageQueue)contactqueue).mail_answer_percentage =
    ((GeneralPercentageQueue)cq).mail_answer_percentage;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM