2012-02-06 20 views
0

IXmlServiceC#ジェネリックインターフェイス、ジェネリックを実装、型指定されたメソッド

List<T> Load<T>() where T : class; 

XmlService

public List<T> Load<T>() where T : class { 
    Type type = typeof(T); 

    if (type == typeof(TicketData)) { return XmlTicketService.LoadInternal(); } // Error: Unable to cast from List<TicketData> to List<T> 

そして、 XmlTicketService.LoadInternal()は型を認識しており、サービスに戻る必要があります

internal static List<TicketData> LoadInternal() { 
    List<TicketData> result = new List<TicketData>(); 

    ThreadPool.QueueUserWorkItem(
     delegate { 
      try { 
       XDocument data = XDocument.Load(_xmlPath); 
       var query = (from element in data.Root.Descendants("Ticket") 
          select new TicketData() { 

uは私のために持っているとアドバイス:)

+1

あなたは実際に質問をしませんでした。つまり、ジェネリック型に対して 'typeof'を使うのは、一般的にはコードの臭いです。 –

答えて

4

さて、あなただけのキャストができ、この場合には、objectを経由希望:

if (typeof(T) == typeof(TicketData)) 
{ 
    return (List<T>) (object) XmlTicketService.LoadInternal(); 
} 

objectキャストが最初に基本的にそれを治療するためのコンパイラを強制的に「通常の」キャストとして。

...しかし、個人的に私はそれはあなたがおそらく非ジェネリックメソッドでジェネリックインタフェースを作成し、ILoadable<TicketData>または何を実装する必要があり、設計の臭いを、提起だと思います。基本的には、あなたのメソッドはではなく、実際にはではありません。特定のタイプに特有の処理をしています。

+0

私はすでにキャストを試しましたが、うまくいきませんでした。私は、ジェネリックインターフェイスと型付きの実装に私のデザインをやり直すと思います。 – Mav

+0

@ user1191900:「うまくいきませんでした」という記述が正確ではありません。あなたはそれを試したとき何が起こったのですか? –

+0

明示的にキャスティングできないリストリストに Mav

関連する問題