为什么我的代码抛出错误消息?

时间:2019-02-01 02:12:00

标签: c#

我正在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;
     }
}
'''

1 个答案:

答案 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的其他有用构造。