0

Windows Phoneアプリケーションでは、さまざまなプロバイダーの複数のWebサービスを利用しています。xamlのデータをバインドするために、すべてをルール化するクラスがあります。まあ言ってみれば :

public class Event
{
  public string Id { get;set;}
  public string Title { get;set;}
  public string Latitude { get;set;}
  public string Longitude { get;set;}
}

プロバイダーに1つのWebサービスがある場合、次のような方法を使用します。

private List<Event> MigrateCompanyEventToEvent(DataServiceCollection<CompanyEvent> collection)
{
   var listEvents = new List<Event>();
   foreach(var item in collection)
   {
      var ev = new Event();
      ev.Id = item.itemId.ToString(); //typeof Guid();
      ev.Title = item.companyEventTitle;
      if(item.latitude != null) { ev.Latitude = item.latitude.ToString(); } //typeof double?
      //etc.
      listEvents.Add(ev);
   }
   return listEvents;
}

しかし...私には多くの同様のWebサービスを提供するプロバイダーがあります。それぞれにメソッドを書きたくないので、ジェネリックメソッドを調べました。わからないと思います。

KidEvents、ParentalEvents、SingleEventsという名前のWebサービスがあります...すべて同じ定義です。だから、私はインターフェースを書きました:

public interface IdataEvents<T>
{
     Guid entity_id {get;}
     string nameEvent {get;}
     double? latitude {get;}
     double? longitude {get;}
}

そして先に進むために私は書いた:

private List<Event> MigrateGenericOdataToEvent<T>(DataServiceCollection<T> collection) where T:IdataEvents<T>
{
    var listEvents = new List<Event>();
    foreach(T item in collection)
    {
       var ev = new Event();
       ev.Title = item.nameEvent;
       ev.Id = item.entity_id;
       //etc.
       listEvents.Add(ev);
    }
    return listEvents
}

私の問題は、私が使用するときです:var SingleEvents = MigrateGenericOdataToEvent(collection); //コレクションタイプのDataServiceCollectionを使用

エラーが発生します:

Le type 'm3.ServiceReferenceData.SingleEvents' ne peut pas être utilisé 
comme paramètre de type 'T' dans le type ou la méthode générique 
'm3.ViewModels.MainViewModel.MigrateGenericOdataToEvent<T>
(System.Data.Services.Client.DataServiceCollection<T)'. 
Il n'y a pas de conversion de référence implicite de 
'm3.ServiceReferenceData.SingleEvents' en 
'm3.ViewModels.IdataEvents<m3.ServiceReferenceData.SingleEvents>'.  

申し訳ありませんが、フランス語です...それは次のような意味です:

The type 'm3.ServiceReferenceData.SingleEvents' can not be used as a paramater 
of type 'T' in the type or generic method 
'm3.ViewModels.MainViewModel.MigrateGenericOdataToEvent<T>
(System.Data.Services.Client.DataServiceCollection<T)'. 
There is no implicit conversion reference of 'm3.ServiceReferenceData.SingleEvents' 
in 'm3.ViewModels.IdataEvents<m3.ServiceReferenceData.SingleEvents>'

SingleEvents、ParentalEvents、KidEvents(すべて同じデータモデル)から1つの汎用イベントにデータを解析することは可能ですか?そして、どうすればそれを行うことができますか?

どうもありがとうございます

4

1 に答える 1

1

発生するエラーは、関数定義のこの部分が原因です。

where T:IGenericOdata<T>

(例外メッセージに基づいて、実際のコードでは使用IdataEvents<T>せずIGenericOdata<T>、使用しないと想定しています。そうでない場合、例外はあまり意味がありません。)

あなたのデータ型があなたがあなたの制約に持っているインターフェースを実際に実装していないと不平を言っています。インターフェイスを実装するものだけがとして使用できることをコンパイラに伝えましたが、インターフェイスをT実装しない型で送信しています。

これらの型が自動生成されたサービス参照からのものである場合、データ型が参照コードジェネレーターによって部分クラスとして実装されているという事実を利用し、別の部分クラスファイルを作成するだけで新しいインターフェイスを実装するように拡張できます。または、各サービス参照クラスの周りにラッパークラスを作成し、そこにインターフェイスを実装することもできます。

于 2013-03-25T13:32:45.253 に答える