foreach变量的动态类型

Lui*_*cio -1 c# foreach

在下面的代码中,如何将变量类型传递给嵌套的foreach语句?getControls是一个递归函数,返回一个控件列表(哇!)

getControls(String type, Control donde)  

var tipos = new List<Type>() { typeof(Button), typeof(KryptonTextBox) };

foreach (Type t in tipos)
{
  List<Control> controls = getControls(t.ToString(), this);
  foreach (***** c in controls)
  {
    c.StateCommon.Back.Color1 = Color.White;
  }    
}
Run Code Online (Sandbox Code Playgroud)

Sam*_*ell 7

foreach语句可以强制转换枚举变量:

IEnumerable objects = ...;
foreach (AnyTypeHere i in objects)
    ...

IEnumerable<Button> buttons = ...;
foreach (MySpecialButton button in buttons)
    ...
Run Code Online (Sandbox Code Playgroud)

只要枚举中的所有按钮都是MySpecialButton派生类型,按钮就可以使用Button.如果您不知道,那么您只能枚举类型MySpecialButton如下的按钮:

IEnumerable<Button> buttons = ...;
foreach (MySpecialButton button in buttons.OfType<MySpecialButton>())
    ...
Run Code Online (Sandbox Code Playgroud)

OfType不同之处Cast在于它过滤枚举而不是在对象属于无法强制转换为目标类型的类型时抛出异常.