2009-05-21 18 views
0

一般的な方法の把握に問題があります。一般的な方法 - コードの複製

私は生成される2つのクラスを持っています(それらはまったく同じですが、同じクラスオブジェクトを使用するためにコードを反応させることはできません)。ここ

はクラスです:あなたはクラス1とクラス2が同じである見ることができるように

public class1 : SoapHttpClientProtocol { 
    public partial class notificationsResponse { 

     private ResponseType[] responsesField; 

     private bool ackField; 

     /// <remarks/> 
     public ResponseType[] Responses { 
      get { 
       return this.responsesField; 
      } 
      set { 
       this.responsesField = value; 
      } 
     } 

     /// <remarks/> 
     public bool Ack { 
      get { 
       return this.ackField; 
      } 
      set { 
       this.ackField = value; 
      } 
     } 
    } 
} 

public class2 : SoapHttpClientProtocol { 
    public partial class notificationsResponse { 

     private ResponseType[] responsesField; 

     private bool ackField; 

     /// <remarks/> 
     public ResponseType[] Responses { 
      get { 
       return this.responsesField; 
      } 
      set { 
       this.responsesField = value; 
      } 
     } 

     /// <remarks/> 
     public bool Ack { 
      get { 
       return this.ackField; 
      } 
      set { 
       this.ackField = value; 
      } 
     } 
    } 
} 

。彼らはインラインクラスであるため、私は重複を持たなければなりません。それと

さておき、私はパラメータとしてこれらのクラス型でupdateメソッドを呼び出すようにしようとしている:

private void UpdateMessageResponses<T>(T results) 
    { 
     T responses = (T)results; 

     foreach (var accts in results.Responses) 
     { 
      int row = GetRowIdByAccountId(accts.ObjectId); 
      if (row != -1) 
      { 
       TestResultsGrid["Status", row].Value = String.Format("{0} {1} - {2} - {3}", accts.ResponseDate, accts.ObjectType, accts.Message, accts.ObjectId); 
      } 
     } 
    } 

私は結果のプロパティにアクセスできるように、私は適切な結果をキャストすることができますか?

+0

C#のジェネリックはC++のテンプレートではないということです。ジェネリックは本当に_generic_です。それらはANY型でパラメータ化することができるように設計されています。あなたは、2つのタイプのうちの1つだけで構築できるものが必要です。ジェネリック医薬品はそうするようには設計されていなかった。自分が見つけた状況は非常に不幸です。 2つの生成された型を共通のインタフェースを実装することができれば、メソッドはそのインタフェースを実装するものを参照することができます。 –

答えて

2

Responsesプロパティのインターフェイスを定義し、そのインターフェイスを実装する必要があります(また、クラスがインターフェイスを実装する)ことを指定する必要があります。

+0

ありがとう、インターフェイスは働いた;なぜ私はそれらを忘れていたDunno;) –

1

私は間違っているかもしれませんが、純粋にジェネリックではできないと思います。唯一の方法は、ジェネリック型のパラメータに制限を設けることですが、アクセスしたいメンバは2つのクラスに共通する基本クラスで宣言されていないため、残念ながらそのオプションは除外されます。

関連する問題