0

我在 C# 类中定义了一堆public const int变量,它们的值也被初始化。如果每个变量的值不唯一,有没有办法让编译器抛出编译器错误?如果变量之间存在值冲突,我不希望我的项目编译。

4

3 回答 3

2

您必须创建一个自定义的Fx Cop 规则,该规则将查看public const int您班级中的成员并检查分配给他们的值。然后,您可以将此规则添加到您的代码分析规则集中,并将其设置为失败时出错(而不是警告)。

于 2012-10-23T22:12:47.527 回答
2

switch 语句中的 case 必须是唯一的,因此您可以switch对要确保不会与其他变量重叠的每个变量使用带有 case 的语句。

static class ColorSwatches
{
    public const int Red = 0, Gray = 1, Blue = 2, Yellow = 3, Grey = 1;


    static ColorSwatches()
    {
        switch (0) {
            case Red:     break;
            case Gray:    break;
            case Blue:    break;
            case Yellow:  break;
            case Grey:    break;
        }
    }
}

不幸的是,这确实需要在switch.

(边栏:这也适用于 C++,在添加之前我已将其用于编译时断言static_assert。)

于 2012-10-23T22:15:29.143 回答
0

在枚举中定义它们。如果您不希望它们从零单调增加,您仍然可以指定值,但如果有任何重复值,编译器会出错。

于 2012-10-23T23:20:50.050 回答