【发布时间】:2013-01-23 18:45:03
【问题描述】:
我有点困惑为什么我在这里遇到这个错误。既然我已经将T 声明为out,那么返回它的类型不应该可以吗?
public interface IWebFeed<out T> where T : BaseItem
{
List<T> getItems();
void loadFeed();
}
相反,我得到:
协变类型参数
T' must be invariantly valid onShared.Service.Feed.IWebFeed.getItems()'
编辑:因此,正如 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 的事实?
【问题讨论】:
-
完全脱离主题,
but List<T> getItems();带有小写g听起来太 Java 了。将其更改为GetItems()或Items {get;} -
好吧,因为我是一名 Java / Objective-C 程序员,使用 Xamarin / C#,这可能就是原因:P 这是一个常见的符号吗?如果有,请注明!
-
@mbeckish:我很感激,但我得到了完全相同的错误,将
List<T>更改为IEnumerable<T>。 -
@Josh - 看起来你是对的。见stackoverflow.com/q/14093332/21727 和forums.xamarin.com/discussion/683/…
-
@CuongLe 我使用的是 Xamarin,而不是 MS C#。
标签: c# generics mono covariance xamarin