gpt4 book ai didi

c# - 为什么我必须在 DataGridViewRow 上调用 Cast<> 扩展方法?

转载 作者:太空宇宙 更新时间:2023-11-03 19:32:40 24 4
gpt4 key购买 nike

这行不通。

var result = 
from row in grid.Rows
where (string) row.Cells["COLUMN_1"].Value == "Test"
select row.Cells["COLUMN_2"].Value as int?;

但这确实如此。

var result = 
from row in grid.Rows.Cast<DataGridViewRow>()
where (string) row.Cells["COLUMN_1"].Value == "Test"
select row.Cells["COLUMN_2"].Value as int?;

据我所知,DataGridViewRowCollection 是 DataGridViewRow 的集合。那么,为什么我必须先将每个成员强制转换为 DataGridViewRow,然后才能访问其属性?

它与 DataGridViewRowCollection 实现非泛型 IEnumerable 的事实有什么关系吗?但不是通用版本 IEnumerable<DataGridViewRow> ?或者它显然使用了 ArrayList在内部?它没有给我带来任何实际问题,但我想更好地理解它。

最佳答案

是的,正是因为它标榜的接口(interface)。 LINQ 中的几乎所有扩展方法都适用于 IEnumerable<T>而不是 IEnumerable . Cast<>是弥合这一差距的一种方式 - OfType<>是另一个。

但是,调用 Cast<T> 有一种更简单的方法- 只需明确键入您的范围变量:

var result = 
from DataGridViewRow row in grid.Rows
where (string) row.Cells["COLUMN_1"].Value == "Test"
select row.Cells["COLUMN_2"].Value as int?;

编译器将其转换为与您的第二个示例完全相同的代码。

关于c# - 为什么我必须在 DataGridViewRow 上调用 Cast<> 扩展方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4046916/

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