Csharp/C#教程:为什么一个对象没有用var强制键入foreach?分享


为什么一个对象没有用var强制键入foreach?

我写的是以下内容

if(this.tabControl1.TabPages.Count != ImagesList.Count()) { foreach (var item in this.tabControl1.TabPages) { } } 

我无法使用项目访问每个项目内的控件。 但是定义它的类型就像

 if(this.tabControl1.TabPages.Count != ImagesList.Count()) { foreach (TabPage item in this.tabControl1.TabPages) { } } 

我可以使用item.Controls轻松访问它们

所以我想知道为什么我真的需要定义/转换这些项目作为TabPage ,不应该编译器/ intellasense计算出它作为this.tabControl1.TabPages每个项目实际上是一个TabPage

因为TabControl.TabPages返回一个TabPageCollection ,它不实现强类型的IEnumerable而是返回一个返回对象的非通用IEnumerable接口。

因此,如果您提供foreach的类型,它将被隐含地呈现。 如果您不提供类型,则其类型为object ,您需要稍后再进行转换。

阅读C#语言规范,8.8.4了解更多信息。

您还可以使用Linq扩展方法Enumerable.Cast

 foreach (var item in this.tabControl1.TabPages.Cast()) { // item is TabPage } 

这很方便,特别是如果你想使用Linq:

 var tabs = this.tabControl1.TabPages.Cast() .Where(tp => tp.Name.StartsWith("MyTabPage")); 

你想要这个吗?

上述就是C#学习教程:为什么一个对象没有用var强制键入foreach?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 foreach (TabPage t in tabControl1.TabPages) { foreach (Control c in t.Controls) { string a = c.Name; } } 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/950184.html

(0)
上一篇 2021年11月18日
下一篇 2021年11月18日

精彩推荐