0

我有点困惑为什么我在这里遇到这个错误。既然我声明T了 as 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>toIEnumberable<T>应该可以解决这个问题,但是当我遵循 的声明时IEnumerable,我得到以下信息:

using System;
namespace System.Collections.Generic
{
    public interface IEnumerable<T> : IEnumerable
    {
        //
        // Methods
        //

        IEnumerator<T> GetEnumerator();
    }
}

这是 Xamarin 或他们的 PCL 中的错误吗?事实T并非如此out

4

2 回答 2

1

MonoTouch ( Xamarin ) 中尚不支持接口变化,并且应该在未来的版本中出现,因为 Mono 最近添加了接口变化。

于 2013-02-08T04:19:27.130 回答
-1

您需要将 GetItems 方法的定义更改为以下...

List<BaseItem> GetItems();

这是因为您声明了T它必须符合形状的限制BaseItem,因此为了保持方差,您必须限制列表中项目的类型。这允许您创建多个BaseItem类列表并交换它们,而无需显式转换。

于 2013-02-08T03:42:51.663 回答