我有一个XML文件转换为列表。PaintClass具有多个参数,例如颜色(红色或橙色或蓝色)或纹理(平滑或光泽)等。
现在,我有几个复选框,以便用户可以确定他希望看到的PaintClass。例如,他能够同时选择红色,橙色和蓝色,然后每个PaintClass都应显示。但是,当他选中“平滑”复选框时,仅应显示具有“平滑”纹理的红色/蓝色/橙色油漆。
代替许多If语句的最佳方法是什么?
亲切的问候,尼尔斯
一个简单的解决方案是:
List<Color> allowedColors = new List<Color>();
if (redCheckBox.IsChecked)
allowedColors.Add(Color.Red);
.
.
.
List<Texture> allowedTextures = new List<Texture>();
if (smoothCheckBox.IsChecked)
allowedTextures.Add(Texture.Smooth);
.
.
.
filtered = paintList.Where( p => allowedColors.Contains(p.Color) &&
allowedTextures.Contains(p.Texture));
另一种方法是将颜色值存储在复选框的Tag属性内,然后遍历复选框:
redCheckBox.Tag = Color.Red;
blueCheckBox.Tag = Color.Blue;
// etc...
List<Color> colors = new List<Color>();
foreach (Object control in checkboxContainer.Children)
{
var c = (control as CheckBox);
if ( null == c )
continue;
colors.Add(c.Tag as Color);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句