2009-06-02 9 views
0

なぜこれはうまくいかず、修正する方法は?インターフェイスとキャスティングリスト

public interface ITheInterface 
{ 

    string a{get;set;} 
    string b{get;set;} 
} 

public class SomeObject: ITheInterface 
{ 
    string a{get;set;} 
    string b{get;set;} 
    ... 
} 

public class SomeGroup 
{ 
    ITheInterface Result; 
    ... 
} 

var results= from y in dc.Groups 
       where y.id==1 
       select new SomeGroup 
         { 
         Result= (from x in dc.Objects 
         select new SomeObject{... } 
         ).SingleOrDefault(), 
         } 

return results.ToList(); 

は、私はあなたの問題はResults.ToList()呼び出しであると仮定し

+1

何がうまくいかないのですか?あなたはどんなエラーを出していますか? –

+0

短い*しかし完全な*プログラムを与えてください。そうでなければ、何がうまくいかないのかわかりません。 –

答えて

1

をインターフェイスにタイプSystem.Collections.Generic.Listから変換できませんでしたか? ITheInterfaceToList()をサポートしていないため、失敗します。 LINQクエリでSingleOrDefault()を呼び出すと、1つの項目が表示されます。 1つの商品にToList()と電話するのは意味がありません。

代わりに、あなたのコードは次のように読んで、場合:次に

IEnumerable<SomeObject> Results = from x in dc.Objects 
            select new SomeObject{... }; 

Results.ToList()はあなたにList<SomeObject>を与えるだろう。あなたが実際に探していることは代わりにList<ITheInterface>ある場合

、あなたはこれを行うことができます。

Results.Cast<ITheInterface>().ToList() 
0

結果は、単一のオブジェクトです。 ToList()はEnumerablesでのみ機能します。

return new List { Results };(これはコレクション初期化子を使用)を書くか、SingleOrDefaultへの呼び出しを取り除き、結果をIEnumerable<ITheInterface>と宣言する必要があります。

1つのオブジェクトだけが必要な場合は、なぜリストを返すのですか?

+0

申し訳ありません編集 – zsharp

+0

を参照してください返すと宣言された関数は何ですか? SomeGroupを返す場合は、ToListの呼び出しを取り除きます。 – SLaks

0

あなたがインターフェイスを実装する際に他の回答に加えて、あなたはpublicとしてメンバ関数を宣言しなければなりませんが:

public class SomeObject: ITheInterface 
{ 
    public string a{get;set;} 
    public string b{get;set;} 
    ... 
} 
0

あなたは

SomeGroup result = results.SingleOrDefault() 
return result; 

これが原因で戻り値の型であると言いたいですあなたのメソッドのSomeGroup(私は推測している)

関連する問題