gpt4 book ai didi

c# - 为什么这个类型转换不起作用?

转载 作者:太空狗 更新时间:2023-10-29 19:52:04 24 4
gpt4 key购买 nike

此代码有效:

foreach(DataColumn column in table.Columns)
{
// do whatever
}

但是这段代码没有:

(IEnumerable<DataColumn>)(table.Columns)

.Columns 属性返回 DataColumnCollection这是一个InternalDataCollectionBase ,它实现了 IEnumerable,因此它应该可以工作。

我得到的错误是

Cannot convert type 'System.Data.DataColumnCollection' to 'System.Collections.Generic.IEnumerable'

最佳答案

DataColumnCollection工具 IEnumerable ,每个返回的行一个DataColumn , 但它没有实现 IEnumerable<DataColumn> .由于它没有实现接口(interface),因此您无法转换为接口(interface)。由于该类是密封的,编译器知道该值不可能实现该接口(interface),因此您甚至不能在编译时对其进行强制转换。

使用 LINQ Cast方法安装:

table.Columns.Cast<DataColumn>()

这实际上是一种适配器方法 - 列集合中的每个元素都将延迟转换为 DataColumn当您从结果中获取它时。

foreach 的原因compiles 是编译器为你添加了显式转换。例如,这将编译:

foreach (string x in table.Columns)
{
}

...但它会在执行时抛出异常。

关于c# - 为什么这个类型转换不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6987077/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com