如果我在Visual Studio中有这行代码:
object[] c = new[] { new object() }.Concat(new[] { new object() });
我得到compiler error CS0266:
无法将类型“System.Collections.Generic.IEnumerable”隐式转换为“object[]”。存在显式转换(是否缺少强制转换?)
然后我使用快速动作灯泡并选择“Add explicit cast”,它会将我的代码转换为以下形式,添加(object[])
:
object[] c = (object[])new[] { new object() }.Concat(new[] { new object() });
不再有编译器错误;但是当我运行代码时,它会抛出一个System.InvalidCastException:
“无法将类型为”Concat 2 Iterator“1[System.Object]”的对象强制转换为类型“System.Object[]”。“
如果VS不能在运行时进行强制转换,为什么要建议这个修复呢?VS给出的建议很糟糕,基本上,这可能会导致意外的bug逃逸。代码编译后,可能会意外地崩溃,因为您 * 信任 * VS建议的修复。
1条答案
按热度按时间ki0zmccv1#
Concat是LINQ方法。如果查看签名,您会看到它返回IEnumerable。LINQ使用延迟执行。您必须枚举结果,或者调用
ToArray
或ToList
以转换为集合。如果你只想连接数组,你应该看看How do I concatenate two arrays in C#?。