Visual Studio System.InvalidCastException:“无法将类型为”Concat2Iterator“1[System.Object]”的对象强制转换为类型“System.Object []”,“

hgqdbh6s  于 2023-01-27  发布在  其他
关注(0)|答案(1)|浏览(392)

如果我在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建议的修复。

ki0zmccv

ki0zmccv1#

Concat是LINQ方法。如果查看签名,您会看到它返回IEnumerable。LINQ使用延迟执行。您必须枚举结果,或者调用ToArrayToList以转换为集合。
如果你只想连接数组,你应该看看How do I concatenate two arrays in C#?

相关问题