将条件值分配给静态类的类成员

时间:2016-05-21 17:48:07

标签: c# class const

这是我的班级:

namespace My.Core
{
    public static class Constants
    {
        public const string Layer_ver_const = "23";

        public const string apiHash_const = "111111";
    }
}

现在我想为 apiHash_const 设置条件值 意思是:

if(Layer_ver_const == "23")
{
  apiHash_const = "111111";
}
else if(Layer_ver_const == "50")
{
  apiHash_const = "222222";
}
else
{
  apiHash_const = "333333";
}

我该怎么做?

3 个答案:

答案 0 :(得分:3)

我担心你不能在运行时这样做。但您可以随时将常量关键字更改为staticstatic readonly,此代码也可以使用。

public static class Constants
{
    public const string Layer_ver_const = "23";

    public static readonly string apiHash_const;

    static Constants()
    {
       if(Layer_ver_const == "23")
       {
         apiHash_const = "111111";
       }
       else if(Layer_ver_const == "50")
       {
         apiHash_const = "222222";
       }
       else
       {
         apiHash_const = "333333";
       }
    }
}

如果您想知道constantstatic readonly之间的区别,请查看以下链接:

Static readonly vs const

答案 1 :(得分:1)

我建议将它们转换为只读字段,并将它们设置在构造函数

常数是一种不同的野兽。在项目中声明常量后,引用它的每个其他项目将保留常量的值,直到重建项目为止。因此,改变常数不是你想要做的。

使这些只读,并在构造函数内部设置它们。

答案 2 :(得分:1)

正如其他答案所指定的那样,您可能需要readonly字段。你甚至可以使用一个属性。然而,通过使计算它的整个表达式成为一个常量表达式, 可能具有字段const

public const string Layer_ver_const = "23";
public const string apiHash_const = 
    Layer_ver_const == "23" ? "111111" :
    Layer_ver_const == "50" ? "222222" :
    "333333"
;

这是可能的,因为我们可以构造一个简单的表达式来分配apiHash_const。在更复杂的情况下,您必须选择readonly字段。