【发布时间】:2017-08-02 09:24:52
【问题描述】:
我是来自 python 的 C# 新手,我不清楚 IEnumerable 对象的具体行为方式,即使在阅读了 MSDN 文档之后也是如此。
例如,IEnumerable 需要一个 int,但以下代码可以正常工作:
IEnumerable<double> squares = Enumerable.Range(1, 100).Select(x => Math.Pow(x, 2));
然而,
IEnumerable<double> square_ = Enumerable.Range(1, 100);
抛出编译错误,你不能将类型'System.Collections.Generic.IEnumerable int'隐式转换为'System.Collections.Generic.IEnumerable double'
我不确定这是否只是对 Enumerable 的工作方式、对象在 C# 中的工作方式或完全其他方面的基本误解,非常感谢帮助和一些指导,帮助新手在哪里阅读以获得更好的主意。
提前非常感谢。
【问题讨论】:
-
我不认为它会抛出异常,你的意思是编译错误。
-
正确,对不起 Neme;又是一个来自解释语言的误称:)。
-
这个问题太宽泛了,因为它涉及到您的许多误解,以及对特定领域术语的不精确使用。例如,您描述的错误消息不是 "throw" (仅在运行时发生,有异常),而只是编译时错误。此外,在任何情况下,非通用
IEnumerable接口(不是 "object")都不需要 "require an int"。 ... -
... 而 “工作正常” 的代码之所以这样做,是因为存在从
int到double的隐式转换。您得到的错误与一个完全不同的问题有关,与泛型类型的差异有关。充分详细地解释所有这些远远超出了一个好的 Stack Overflow 问题的范围,尤其是考虑到问题的所有不相关部分。 -
如果我的问题范围太广,我深表歉意。我希望你也能原谅我的语法错误,因为我刚刚学习了语言,接口和对象之间的差异仍然超出了我的理解范围。如果您认为可以更好地将我引导到对我的知识水平有意义的资源,请随时关闭它或建议改写,以便其他人可以在这里找到帮助。
标签: c# .net ienumerable enumerable