Unity的C#版本实现了协方差,但是我可以在网上找到任何一个例子,这段代码不能编译
string[] stringArray = new string[0];
IEnumerable<string> stringIEnumerable = new string[0];
// string[] implements IEnumerable<string>,
// and implicitly casts to IEnumerable<object> through covariance
IEnumerable<object> objects1 = stringArray;
// But puzzling enough, one cannot implicitly
// convert IEnumerable<string> to IEnumerable<object> here
IEnumerable<object> objects2 = stringIEnumerable;
完整错误:
error CS0266: Cannot implicitly convert type `System.Collections.Generic.IEnumerable<string>' to `System.Collections.Generic.IEnumerable<object>'. An explicit conversion exists (are you missing a cast?)
是的,我现在明确地投了它,但我需要知道为什么会这样。我知道Unity的C#版本不是最后一个版本,但是这种行为让我很奇怪。我假设没有中间版本的C#在没有这些隐式转换的情况下实现协方差
附录:我喜欢干净的代码。我想知道如何使这些隐式转换工作,因为他们在我使用它们的上下文中感觉非常正确和自然
答案 0 :(得分:1)
原来,协方差是Unity编译器当前版本支持的编译器功能,但实际框架是旧版本,其中通用接口未定义为具有协变类型