116得票2回答
使用C#泛型时理解协变和逆变的问题

我不明白为什么下面的C#代码无法编译。 如您所见,我有一个静态泛型方法Something,它有一个IEnumerable参数(其中T被限制为IA接口),并且这个参数无法隐式转换为IEnumerable。 这是为什么呢?(我不是在寻找解决方法,只是想理解为什么它不起作用)。 public ...

109得票2回答
C# 4.0中如何实现通用协变和逆变?

我没有参加2008年的PDC,但是我听说C# 4.0宣布支持泛型协变和逆变。也就是说,List<string>可以被赋值给List<object>。这是怎么做到的? 在Jon Skeet的书《C#深度剖析》中,解释了为什么C#泛型不支持协变和逆变。主要是为了编写安全的...

102得票3回答
为什么Scala的不可变Set在类型上不是协变的?

编辑: 根据原始答案重新编写了这个问题 scala.collection.immutable.Set 类在其类型参数中不是协变的。为什么会这样呢? import scala.collection.immutable._ def foo(s: Set[CharSequence]): Uni...

99得票15回答
C#: 重写返回类型

有没有办法在C#中覆盖返回类型?如果有,如何覆盖?如果没有,为什么,以及推荐的方法是什么? 我的情况是我有一个具有抽象基类和派生类的接口。我想这样做(好吧,不是真的,但作为一个例子!):public interface Animal { Poo Excrement { get; } }...

98得票9回答
C#支持返回类型协变吗?

我正在使用.NET框架,我真的想能够制作一个自定义类型的页面,让我的整个网站都使用它。但当我尝试从控件中访问该页面时出现问题。我希望能够返回我的特定类型的页面而不是默认页面。有没有办法做到这一点?public class MyPage : Page { // My own logic ...

94得票2回答
在C#中理解协变和逆变接口

我在一本关于C#的教材中遇到了这些术语,但由于缺乏上下文,我很难理解它们。有没有一个简明扼要的解释说明它们是什么以及它们有什么作用? 澄清编辑: 协变接口:interface IBibble<out T> . . 逆变接口:interface IBibble<in T&g...

92得票4回答
为什么Task<T>不支持协变性?

class ResultBase {} class Result : ResultBase {} Task&lt;ResultBase&gt; GetResult() { return Task.FromResult(new Result()); } 编译器告诉我它无法将 Task&...

86得票14回答
在C#中,为什么无法将List<string>对象存储在List<object>变量中?

在C#中,似乎无法将List对象存储在List变量中,甚至无法明确地进行强制类型转换。List&lt;string&gt; sl = new List&lt;string&gt;(); List&lt;object&gt; ol; ol = sl; 结果导致无法隐式转换类型 System.Co...

83得票2回答
Scala中泛型中的Any和下划线有何不同?

以下Scala中泛型定义的区别是什么: class Foo[T &lt;: List[_]] 和 class Bar[T &lt;: List[Any]] 我的直觉告诉我它们大致相同,但后者更加明确。我发现有些情况前者可以编译通过,而后者却不能,但我无法确定具体区别。 谢谢! ...