如果我输入以下代码,我会收到错误消息。基本上,当遇到不是标签的Control时,foreach会中断。
foreach (Label currControl in this.Controls()) {
...
}
我必须做这样的事情。
foreach (Control currControl in this.Controls()) {
if(typeof(Label).Equals(currControl.GetType())){
...
}
}
有没有人能想到更好的方法,而不需要检查类型?我可以以某种方式获取foreach跳过不是标签的对象吗?
答案 0 :(得分:10)
如果您使用的是.NET 3.5或更高版本,则可以执行此类操作
foreach(var label in this.Controls().OfType<Label>()) {
}
OfType<T>
会忽略无法转换为T的类型。请参阅http://msdn.microsoft.com/en-us/library/bb360913.aspx
答案 1 :(得分:6)
Brian在OfType
方面给出了最合适的答案。但是,我想指出,在做需要这样做的情况下,有更好的方法来检查类型。而不是您当前的代码:
if(typeof(Label).Equals(currControl.GetType())){
...
}
您可以使用:
if (currControl is Label)
{
Label label = (Label) currControl;
// ...
}
或:
Label label = currControl as Label;
if (label != null)
{
// ...
}
请注意,这两个替代方案还都包含Label
的子类,而您的原始代码却没有。