【问题标题】:Assign Conditional Value to class member of static class将条件值分配给静态类的类成员
【发布时间】:2016-05-21 17:48:07
【问题描述】:

这是我的课:

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";
}

我该怎么做?

【问题讨论】:

  • 如果Layer_ver_const 是一个常数,那么您的其他值将如何设置?
  • 我有很多哈希码。我想在 calss 中手动更改版本,这个类返回期望 Hash_code。
  • 听起来您应该简单地将“派生”常量更改为 static readonly 并将它们设置在静态构造函数中。
  • 我认为@CharlesMager 是对的。我很确定 const 关键字意味着它是一个编译时间常数,不能以编程方式设置。

标签: c# class constants


【解决方案1】:

恐怕你不能在运行时这样做。但是您可以随时将常量关键字更改为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

【讨论】:

    【解决方案2】:

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

    常量是一种不同的野兽。一旦在项目中声明了常量,引用它的每个其他项目都将保留该常量的值,直到您重新构建项目。因此,更改常量不是您想要做的。

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

    【讨论】:

      【解决方案3】:

      正如其他答案所指定的,您可能想要一个 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 字段。

      【讨论】:

        猜你喜欢
        • 2016-06-25
        • 2011-03-23
        • 2011-07-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多