gpt4 book ai didi

c# - 为什么我的 var 调用不返回 DataListItems

转载 作者:行者123 更新时间:2023-11-30 13:39:19 24 4
gpt4 key购买 nike

自从使用 Resharper 以来,我一直热衷于尽可能使用 var inside 方法。因此,稍后如果您传入不同的类型,则更改会在您的代码中向下级联,而不必将每个 int 声明更改为 double。这让我想到了我的问题。我正在从 DataList 中检索 DataListItems 的列表

var daysWorked = dlResourcesAllocated.Items;

然后遍历它返回的列表

foreach (var d in daysWorked)
{
var c = d.FindControl("ucSomethingSomething"); //Doesn't compile d has no methods
}

我的 d 突然转换为一个没有方法的对象

foreach (DataListItem d in daysWorked)
{
var c = d.FindControl("ucSomethingSomething");
}

但是效果很好。

我很好奇为什么“var”无法弄清楚它是 DataListItem 的集合。 Intellisense 似乎知道它。我确信对此有一个非常简单的单行解释。双向飞碟兄弟可能会出现并指出我在深入阅读 C# 时应该更加注意......

最佳答案

这是因为 DataListItemCollection 只实现 IEnumerable , 不是 IEnumerable<DataListItem> ,因为它早于泛型。

因为它没有实现 IEnumerable<T> ,运行时使用 Object在你的foreach循环除非您明确提供类型

通过这样写:

foreach (var d in daysWorked)

编译器看到 daysWorked工具 IEnumerable ,并将其重写为:

foreach (object d in daysWorked)

使用 foreach 时与 IEnumerable (非泛型),您可以明确提供类型:

foreach (DataListItem d in daysWorked)

这样做有效地转换了 IEnumerable 的结果为您,在循环中提供正确的类型。

关于c# - 为什么我的 var 调用不返回 DataListItems,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12481334/

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