我有一个带有约束的泛型函数,它返回集合中的第一个对象:
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);
无法弄清楚为什么,有人可以提供帮助吗?谢谢。
答案 0 :(得分:2)
它不能从类型L向后推断类型T.使用单个通用参数:
static T first<T>(ICollection<T> list)
where T : SomeType
{
...