[英]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;
}
}
}
这将防止运行时类型不匹配的异常。
您需要添加括号,正在发生以下情况:
由于财产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.