0

次の抽象クラスがあります。

abstract class ContactQueue
{

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

このクラスのサブクラスの 1 つが次のとおりです。

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();
    }
}

抽象クラスのサブクラスがいくつかあるので、それらすべてを含むことができるリストを作成しました。そのリストをループし、特定のフィールドの 1 つにアクセスしてこれを実行します。次のことを試みました。

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

他の人が言及しているように、エラーの原因となっている括弧がありません。

代わりに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 に答える
3

括弧を追加する必要があります:

((GeneralPercentageQueue)contactqueue).mail_answer_percentage = ...;
于 2013-07-05T15:49:18.770 に答える
1

括弧を追加する必要があります。何が起こっているのかは次のとおりです。

  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;
于 2013-07-05T15:51:28.173 に答える