C#泛型约束:无法从使用中推断出类型

时间:2012-04-18 10:59:20

标签: c# generics

  

可能重复:
  No type inference with generic extension method

我有一个带有约束的泛型函数,它返回集合中的第一个对象:

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);

无法弄清楚为什么,有人可以提供帮助吗?谢谢。

1 个答案:

答案 0 :(得分:2)

它不能从类型L向后推断类型T.使用单个通用参数:

static T first<T>(ICollection<T> list) 
where T : SomeType
{
  ...