Если я ввожу код ниже, я получаю ошибку. В основном foreach повредится, когда он столкнется с Управлением, которое не является маркировкой.
foreach (Label currControl in this.Controls()) {
...
}
Я должен сделать что-то вроде этого.
foreach (Control currControl in this.Controls()) {
if(typeof(Label).Equals(currControl.GetType())){
...
}
}
кто-либо может думать о лучшем способе сделать его без меня бывший должный проверить тип? Я могу так или иначе заставить foreach пропускать объекты, которые не являются Маркировками?
Если вы используете .NET 3.5 или новее, вы можете сделать что-то вроде этого
foreach(var label in this.Controls().OfType<Label>()) {
}
OfType
будет игнорировать типы, которые не могут быть преобразованы в T. См. http: // msdn. microsoft.com/en-us/library/bb360913.aspx
Брайан дал наиболее подходящий ответ с точки зрения OfType
. Однако я хотел указать, что есть лучший способ проверки типов в тех случаях, когда вам нужно это сделать. Вместо вашего текущего кода:
if(typeof(Label).Equals(currControl.GetType())){
...
}
Вы можете использовать:
if (currControl is Label)
{
Label label = (Label) currControl;
// ...
}
или:
Label label = currControl as Label;
if (label != null)
{
// ...
}
Обратите внимание, что обе эти альтернативы будут также включать подклассы Label
, который ваш исходный код нет.