[英]How to do this in c#?
我有一个MyClass列表,在主页上有10个控件,这些控件将显示有关该项目列表的信息。 我想要的是检查列表中项目的数量,然后使多余的控件不可见。 现在,我正在使用此代码,但是有更简单的方法吗?
if (myList.Count > 0)
{
Control1.MyClassInfo = myList[0];
if (myList.Count > 1)
{
Control2.MyClassInfo = myList[1];
if (myList.Count > 2)
{
// and like that till 10
}
else
{
Control3.Visible = false;
Control4.Visible = false;
// till 10
}
}
else
{
Control2.Visible = false;
Control3.Visible = false;
// till 10
}
}
else
{
Control1.Visible = false;
Control2.Visible = false;
Control3.Visible = false;
// and then till 10
}
好吧,只需将您的控件添加到列表中(有序)。
像这样
var controlList = new List<Control>{ Control1, Control2, Control3 /*etc*/};
var count = myList.Count;
for (var i = 0; i < controlList.Count; i++) {
controlList[i].Visible = count > i;
}
您可以创建控件列表
List<Control> MyControls = new List<Control>{Control1, Control2,..,Control10};
接着
foreach(var C in MyControls)
C.Visible=false;
for(int i=0; i<myList.Count; i++)
C[i].Visible=true;
编辑:对于这里更高级的编码器,此技术称为Composite Pattern 。
基本上就是这样。 但是您可以通过两种方式改进该基本概念:
1)使用收藏
List<Control> _controls1to10;
将控件放入该集合中,并编写如下方法:
private void setVisibility(List<Control> _controls, bool visible)
{
foreach (Control c in _controls1to10)
{
c.Visible = visible;
}
}
这将使事情变得容易。
2)使用布尔表达式而不是嵌套的if
,如下所示:
bool hasElements = myList.Count > 0;
bool hasMoreThan1 = myList.Count > 1;
// ... and so on
这意味着您将主开关置于顶部,并在以下代码中使用它们。 这是一个说明概念的幻想示例 ,但不适用于您的代码:
bool isEditable = User.LoggedIn && SystemState.Maintenance == false && item.Count > 0;
editButton.Visible = isEditable;
dropList.Visible = !isEditable;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.