器的新生代,我有以下代码:如何找出如果对象是<type>或<type>
foreach (var control in this.Controls)
{
}
我想要做的事就像control.Hide()
在那里。但this.Controls
集合中的项目不是Control
(它们是Object
)。
我似乎无法记住安全的方法来施放这个来调用hide,如果它确实是Control
类型的,那么除此之外什么也不做。 (我是一个移植的Delphi程序员,我一直在思考类似control is Control
。)
我没有这样做,因为resharper认为该集合的唯一其他选项是“Object”。我假定(正如我在我的问题中指出的那样)由集合返回的值是'Object'类型的,并且可以是不同类型的类。 – Vaccano 2010-04-16 04:14:44
在这种情况下,R#是错误的,而且Anthong Pegram是对的。 Controls集合中的所有对象都是Control类型的,因此将迭代变量声明为“Control”是安全的。其他解决方案只是过分复杂的事情,这非常简单。 – EMP 2010-04-16 04:18:07
ControlCollection是C#中的预泛型,因此不是强类型的,这就是为什么在var上的类型推断拉对象而不是控制。但是,您应该可以安全地使用Control控件而不是var控件,因为该集合实际上只能控制控件。就像如果你有一个只包含ints的ArrayList,你可以说(int i在arrayList中),即使它在技术上将项目存储为对象。 – 2010-04-16 04:19:14