我有点困惑,为什么这里会出现这个错误。既然我已经将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()'
EDIT:因此,正如mbeckish所指出的,在他的链接中,将List<T>
更改为IEnumberable<T>
应该可以解决这个问题,但当我遵循IEnumerable
的声明时,我会得到以下结果:
using System;
namespace System.Collections.Generic
{
public interface IEnumerable<T> : IEnumerable
{
//
// Methods
//
IEnumerator<T> GetEnumerator();
}
}
这是Xamarin或他们的PCL中的错误吗?T
不是out
?
MonoTouch(Xamarin)中还不支持接口差异,并且应该会在未来的版本中出现,因为Mono最近添加了接口差异。
您需要将GetItems方法的定义更改为以下。。。
List<BaseItem> GetItems();
这是因为您声明了对T
的限制,它必须符合BaseItem
的形状,因此为了保持差异,您必须限制列表中项目的类型。这允许您创建BaseItem
类的多个列表,并在不需要显式转换的情况下交换它们。