相关疑难解决方法(0)

在静态类中使用consts

上周末我遇到了一个开源项目,当时我碰到了一些代码,让我困惑地查看了C#规范中的用法.

问题中的代码如下:

internal static class SomeStaticClass
{
    private const int CommonlyUsedValue = 42;

    internal static string UseCommonlyUsedValue(...)
    {
        // some code
        value = CommonlyUsedValue + ...;

        return value.ToString();
    }
}
Run Code Online (Sandbox Code Playgroud)

我被猝不及防,因为这似乎是静态函数使用的非静态字段,有些如何在静态类中编译得很好!

规范声明(§10.4):

常量声明可以包括一组属性(§17),一个新修饰符(§10.3.4),以及四个访问修饰符的有效组合(§10.3.5).属性和修饰符适用于constant-declaration声明的所有成员.尽管常量被认为是静态成员,但常量声明既不需要也不允许使用静态修饰符.同一修饰符在常量声明中多次出现是错误的.

所以现在它更有意义,因为常量被认为是静态成员,但句子的其余部分对我来说有点令人惊讶.为什么常量声明既不需要也不允许使用静态修饰符?不可否认,我不知道这个规范是否足以让它立即变得有意义,但为什么决定不强制常量使用静态修饰符如果它们被认为是静态的?

查看该段落中的最后一句,我无法弄清楚它是否直接与前一个语句有关,并且在常量上有一些隐式静态修饰符,或者它是否作为常量的另一个规则.任何人都可以帮我解决这个问题吗?

c# static constants

31
推荐指数
3
解决办法
1万
查看次数

有没有办法让我的开关/案例落到C#的下一个案例中?

我正在使用switch/case语句来处理已部署应用程序的一些更新.基本上,我想通过案例来执行从当前运行版本到最新版本的更新.

从Visual Studio对我大喊大叫,我了解到C#不允许进入下一个案例(正是我想要做的).从这个问题,我学会了如何做我想做的事.但是,它仍然显然是一个错误.

我得到的是

switch (myCurrentVersion)
{
    case null:
    case "":
    case "0":
        UpdateToV1();
        goto case "1";
    case "1":
        UpdateToV2();
}
Run Code Online (Sandbox Code Playgroud)

我在线上收到以下错误case "1"::

错误1控件不能从一个案例标签('case"1":')转到另一个案例标签

难道我做错了什么?我怎么能强迫它掉下来?

c# switch-statement

14
推荐指数
3
解决办法
8210
查看次数

标签 统计

c# ×2

constants ×1

static ×1

switch-statement ×1