2017-05-26 5 views
-2

https://github.com/tommcclean/XContextジェネリックリストを返すために、C#の試みは、「implictlyタイプを変換できません」

私は、ファイルシステム上のXMLファイルを使用してデータを取得し保存し、ライブラリを書いています。 XMemoryと呼ばれるクラスは、キャッシュのように取り出された値を保持することになっています。

手順1:任意のオブジェクトからXMLファイルを読み込みます。ファイルに格納された直列化XMLの使用。

DemoEntity. 

ステップ2:オブジェクトのリストにXMLをデシリアライズします。

List<DemoEntity>. 

ステップ3:後で検索するためのクラスプロパティにオブジェクトのリストを格納する。

問題:実行時にオブジェクトを渡すためにTを使用しています。私はメモリ内のリストから取り出してリストとして返すことはできません。

注:XEntityは、このライブラリを使用するためにサポート対象のオブジェクトが実装する必要のあるインタフェースです。

internal class XMemory 
{ 
    private List<List<XEntity>> EntityContents { get; set; } = new List<List<XEntity>>(); 

    internal List<T> Read<T>() 
    { 
     var entityContent = EntityContents.FirstOrDefault(); 

     return entityContent; 
    } 
} 

エラーが「implictlyタイプを変換できません読み込む 『System.Collections.Generic.List』 『System.Collections.Generic.List』

+0

ここではジェネリックの目的は何か分かりません。実用的な例がありますか? –

+0

このライブラリを他のプロジェクトのリファレンスとして追加したいと考えています。このプロジェクトは、他のプロジェクトで作成されたオブジェクトを認識しません。だから私はその理由でTを使用しています。オブジェクトを作成してライブラリをXMLにシリアル化し、後でそれを取得することができます –

+0

問題をうまく説明できない場合は申し訳ありません。私はそれが(https://github.com/tommcclean/XContext)を助けるなら私のプロジェクトへのリンクを追加しましたデモプロジェクトは私が達成しようとしているものを強調表示します –

答えて

3

問題はコンパイラがEntityContentsのどんな内部はTのインスタンスであることを知る方法がないということです。そのため、値を明示的にキャストする必要があります。

internal List<T> Read<T>() 
{ 
    return EntityContents.First().Cast<T>().ToList() 
} 
0

に我々場合は、(タイプTを実装する必要が明記してください私たちは、クラスのために話している場合XEntity)は()インタフェースのためのOT継承を話している:

internal List<T> Read<T>() where T : XEntity 
{ 
    var entityContent = EntityContents.FirstOrDefault(); 

    return entityContent; 
} 

上記の変更は、コードが正常にコンパイルすることになるだろうという事実にもかかわらず、私はの目的を理解することはできませんあなたのクラスとその方法。

0

List<T>を返すと書いている間は、関数は常にList<XEntity>を返します。したがってTXEntityではありません。

私は、このクラスがジェネリックにするために、あなたに助言し、それがTの戻ります

internal class XMemory<T> 
{ 
    private List<List<T>> EntityContents { get; set; } = new List<List<T>>(); 

    internal List<T> Read<T>() 
    { 
     var entityContent = EntityContents.FirstOrDefault(); 

     return entityContent; 
    } 
} 
+0

お返事ありがとうございます。 XMemoryはたくさんの異なるオブジェクトの内容を格納することになっているので、私はこれを行うことができません。そのため、すべてのオブジェクトに共通の要素を提供するためにInterfaceを使用しようとしました。この変更を行うと、1つのタイプしか保存できません。 –

関連する問題