0

我有以下抽象类:

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

那么我如何访问它呢?

4

3 回答 3

3

您需要添加括号:

((GeneralPercentageQueue)contactqueue).mail_answer_percentage = ...;
于 2013-07-05T15:49:18.770 回答
3

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

相反,您可以使用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;
        }
    }
}

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

于 2013-07-05T15:54:53.447 回答
1

您需要添加括号,发生的情况如下:

  1. 调用contactqueue.mail_answer_percentage
  2. 在 contactqueue.mail_answer_percentage 上调用 cast 以键入 GeneralPercentageQueue

因为该属性mail_answer_percentage不是类型中的属性,ContactQueue所以第一次调用失败,并且您收到mail_answer_percentage不是属性的错误ContactQueue

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

((GeneralPercentageQueue)contactqueue).mail_answer_percentage =
    ((GeneralPercentageQueue)cq).mail_answer_percentage;
于 2013-07-05T15:51:28.173 回答