我有以下抽象类:
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();
}
}
现在,由于我有几个抽象类的子类,我创建了一个可以包含它们的列表,我想循环遍历该列表并访问其中一个specefic字段来执行此操作,我尝试了以下内容:
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
那我该如何访问呢?
答案 0 :(得分:3)
您需要添加括号:
((GeneralPercentageQueue)contactqueue).mail_answer_percentage = ...;
答案 1 :(得分: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;
}
}
}
这样可以防止运行时出现类型不匹配的异常。
答案 2 :(得分:1)
您需要添加paranthesis正在发生的事情如下:
由于属性mail_answer_percentage
不是ContactQueue
类型的属性,因此第一次调用失败,并且您收到mail_answer_percentage
不属于ContactQueue
<的属性的错误/ p>
所以你的代码应该是
((GeneralPercentageQueue)contactqueue).mail_answer_percentage =
((GeneralPercentageQueue)cq).mail_answer_percentage;