2009-06-21 12 views
3

これまで私はこれを尋ねましたが、私は正しい答えを得られなかったので、答えが見逃されました。ネストされたジェネリックス

私がObservableColletion<T>を返すメソッドを持っていたら、これを別の一般的な方法でどのように使用するのですか?

method2<ObservableCollection<T>>(){} 

は、移動するための方法だろう。

Ado.NET Dataservicesクエリの結果をすべてのサブスクライバに渡す汎用のresultEventArgsを作成しようとしています。その内部で私は[生成Ado.NET 1.5]返された強く型付けされたEntityCollectionを渡すことができるotの欲しい

だから私は、全体のado.netののDataServicesの混乱を取得する必要はありませんでしたので、はい、私の質問はObservableCollectionを言葉で表現されます。それが依存

乾杯 デイブ

答えて

4

アイテムタイプ、またはコレクションタイプを指定しますか?あなただけのアイテムを指定したい場合は、Tはただの項目に関する:

public ObservableCollection<T> SomeMethod<T>() 
{ 
    var data = new ObservableCollection<T>(); 
    data.Add(default(T)); // or whatever 
    return data; 
} 

その後、あなたはObservableCollection<Order> orders = SomeMethod<Order>()などを使用することができますが、コレクション型を指定する必要がある場合は、より一般的なタイプを必要とするかもしれません...

public TList SomeMethod<TList, T>() 
    where TList : class, IList<T>, new() 
{ 
    var data = new TList(); 
    data.Add(default(T)); // or whatever 
    return data; 
} 

しかし、それを呼び出すのは難しいです。リストが引数でない限り、タイプ推論はできません。つまり、それを呼び出すときにはTListTの両方を指定する必要があります。

+0

Marc、 これは、問題の真実と、「どこで」私はいくつかのMSDNを通して見てきたので、これを受け入れます。それは乱雑に見えますが、確かに私の140のエンティティのそれぞれのクラスの爆発は痛いほどです。 これを調べると、resultEventArgsクラスを必要に応じて多態性にすることができると思います。代わりに、戻り値の型を仮定してエンティティにキャストし、メソッド/プロパティを使用できるようになりますが、私はいくつかの不正なパスを航海していると思います。 – DavidA

関連する問題