在C#中设置值为常量属性

时间:2017-08-31 14:20:44

标签: c# const

我正在部分修改一个应用程序,我需要将以下常量的值设置为环境变量的值(如果存在)

我已经拥有的东西:

private const string BuildPackagePath = @"\\server\build\";

我想做的是:

if (Environment.GetEnvironmentVariable("EnvVar") != null)
Set the property value to = Environment.GetEnvironmentVariable("EnvVar")
else
{Keep default/assigned value}

据我所知,对齐的左侧必须是变量。我可能不得不改变类型,但只是想知道是否有人可以给我一个想法,所以当前代码的结构可以保持原样。

3 个答案:

答案 0 :(得分:2)

考虑使用不带setter的静态属性

// evaluates Environment Variable on each call
private static string BuildPackagePath 
{
    get { return Environment.GetEnvironmentVariable("EnvVar") ?? @"\server\build\"; }
}

static readonly字段只会评估一次环境变量(但不会立即在启动时When do static variables get initialized in C#?评估)

private static readonly string BuildPackagePath = 
        Environment.GetEnvironmentVariable("EnvVar") ?? @"\server\build\";

答案 1 :(得分:1)

您无法修改常量值,这就是为什么它被称为常量。但是,您可以使用readonly来指示只能在构造函数中修改成员:

class MyClass
{
    private readonly string BuildPackagePath;
    public MyClass()
    {
        var value = Environment.GetEnvironmentVariable("EnvVar");
        if(value != null) this.BuildPackagePath = value;
        else this.BuildPackagePath = @"\server\build\";
    }
}

甚至更短时间使用null-conitional operation

this.BuildPackagePath = value ?? @"\server\build\";

答案 2 :(得分:1)

您可以使用“readonly”修饰符而不是const。然后,您可以在类的构造函数中设置字段的值。例如:

class SampleClass
{
      public int x;
      // Initialize a readonly field
      public readonly int y = 25;
      public readonly int z;

      public SampleClass()
      {
         // Initialize a readonly instance field
         z = 24;
      }
}