我正在C#中创建一个方法来更改控件的可见性,但是当我使用switch语句知道需要哪个控件时,我收到一条错误消息,提示需要一个恒定值。
这是我的代码:
var closestLower = referenceNum - Test.Where(x=>x<referenceNum).Max();
var closestHigher = Test.Where(x=>x>referenceNum).Min() - referenceNum;
我希望它能让我以这种方式使用
public void _Visible(Control sf, bool visible)
{
switch (sf)
{
case panel1:
break;
}
}
'''
答案 0 :(得分:2)
什么是panel1
?大概这是您类中的一个属性,它代表表单上的Control
。错误告诉您它不是一个编译时常量,对于property / variables / etc确实如此。
如果其值可以变化,则编译器无法保证switch
结构将是有效的。它需要能够保证生成可执行代码。
您要么需要使用常量值,要么将switch
结构替换为if/else if
结构。例如:
public void _Visible(Control sf,bool visible)
{
if (sf == panel1) // or ReferenceEquals() ?
{
// do something
}
else if (sf == panel2)
{
// do something else
}
// etc.
}
switch
并非总是 直接替代if/else if
结构。 the documentation中有更多信息,包括“类型模式”和“ when子句”以及switch
的其他有用构造。