1

重複の可能性:
ジェネリック拡張メソッドによる型推論なし

コレクション内の最初のオブジェクトを返す Constraint を使用したジェネリック関数があります。

static T first<T, L>(L list) 
where L : ICollection<T>            
where T : SomeType
{
        T r = default(T);
        if (list != null && list.Count>0)
        {
            if (list.Count == 1)
            {
                r = list.First();
            }
            else
            {
                //throw some exception ...
            }
        }
        return r;
 }

しかし、コレクションに対して使用すると、コードがコンパイルされず、「使用法から型を推測できません」というエラーが表示されます。

ICollection<SomeType> list = funcReturnCollectionOfSomeType();
SomeType o = first(list);

理由がわかりませんでした。誰か助けてくれる人はいますか?ありがとうございました。

4

1 に答える 1

2

型 L から逆方向に型 T を推論することはできません。単一のジェネリック パラメーターを使用します。

static T first<T>(ICollection<T> list) 
where T : SomeType
{
  ...
于 2012-04-18T11:08:45.367 に答える