我有下面的代码,运行通过GroupControl,在C#中本机被称为GroupBox,我想做的是通过它内部,并根据对象是我想执行一个动作,例如:
foreach (Control item in groupControl1.Controls)
{
MessageBox.Show(item.ToString());
if (item is CalcEdit)
{
(CalcEdit)item = item.value=0
}
if (item is DateEdit)
{
(DateEdit)item = item.DateTime.now
}
}
但是我不知道正确的方法来暂时地对对象进行等级划分,以获得它的属性,从而建立我想要的价值。
什么是暗示?
3条答案
按热度按时间oyxsuwqo1#
这里有一个选择:
我做了一些小的调整,因为你的代码似乎没有意义,但模式匹配是重要的一部分。
您还可以执行以下操作:
第二个选项效率较低,因为它将整个
Controls
集合枚举两次,但由于项目数量非常少,因此差异微不足道。e7arh2l62#
@jmcilhinney的答案(非常好)需要C# 7.0或更高版本。如果由于某种原因,您只能使用较早版本(缺少模式匹配),那么这个稍微麻烦一点的方法是一种替代方法:
a11xaf1n3#
虽然确定类型和设置属性是很简单的
但是,这也代表了一个有趣的实现“责任链”模式的案例,但仅在您具有比仅仅设置值更复杂的逻辑的情况下
不过话又说回来...看看这对你来说是不是矫枉过正