我有点困惑,为什么我在这里遇到这个错误。由于我已将T
声明为out
,因此返回其类型不应该没问题吗?
public interface IWebFeed<out T> where T : BaseItem
{
List<T> getItems();
void loadFeed();
}
相反,我得到:
协变类型参数
T' must be invariantly valid on
Shared.Service.Feed.IWebFeed.getItems()'
编辑:所以,正如mbeckish指出的那样,在他的链接中,将List<T>
更改为IEnumberable<T>
应解决此问题,但是当我遵循{{1}的声明时我得到以下内容:
IEnumerable
这是Xamarin或他们的PCL中的错误吗? using System;
namespace System.Collections.Generic
{
public interface IEnumerable<T> : IEnumerable
{
//
// Methods
//
IEnumerator<T> GetEnumerator();
}
}
不是T
的事实?
答案 0 :(得分:1)
MonoTouch(Xamarin)尚不支持界面差异,因为Mono最近添加了界面差异,所以未来版本应该会出现。
答案 1 :(得分:-1)
您需要将GetItems方法的定义更改为以下内容...
List<BaseItem> GetItems();
这是因为您声明T
限制它必须符合BaseItem
的形状,因此为了保持方差,您必须限制列表中的项目类型。这允许您创建多个BaseItem
类列表并交换它们而无需显式转换。