在这里,我们使用AsEnumerable()扩展方法。
IEnumerable<string> strings = grdLookupPracticeMultiple.GridView.GetSelectedFieldValues("ID").Select(s => (string)s).AsEnumerable();
什么是(string)s
答案 0 :(得分:3)
在这种情况下,(string)s
只是说“将变量s
转换为类型string
”-我猜想GetSelectedFieldValues("ID")
返回object
,并且您需要string
的序列。实际上有一个.Cast<string>()
会为您完成的。
关于何时需要AsEnumerable()
(实际上很少见),在这种情况下可能不需要。关键场景是不会否则。也许您明确希望将IQueryable<T>
视为IEnumerable<T>
(以强制执行LINQ-to-Objects而不是查询组合)。或者,也许您正在处理类似DataSet
的问题,其中.Rows
的{{1}}实际上没有{em> ,并且需要帮助。
关于何时使用IEnumerable<T>
:何时要创建数据快照。目前,T
是数据上的延迟执行序列。当您.ToList()
对其进行操作时,它将执行 。因此:如果列表在现在和之后之间发生变化:您将获得更新的内容。通常,您需要数据现在存在。
edit:实际上,在这种情况下,strings
返回快照,因此:在这种情况下,它实际上不会更新 ,但在许多其他情况下:它可能;所以:需要考虑。
所以:总结一下,您可能只想要:
foreach
但是,如果这是dev express网格,那么您已经从GetSelectedFieldValues
获得了var strings = grdLookupPracticeMultiple.GridView.GetSelectedFieldValues("ID")
.Cast<string>().ToList();
,那么也许这会更有效:
List<T>