Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#中,将值设置为常量属性_C#_Constants - Fatal编程技术网

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

在C#中,将值设置为常量属性,c#,constants,C#,Constants,我正在部分修改一个应用程序,其中需要将以下常量的值设置为环境变量的值(如果存在) 我已经拥有的: private const string BuildPackagePath = @"\\server\build\"; 我想做的是: if (Environment.GetEnvironmentVariable("EnvVar") != null) Set the property value to = Environment.GetEnvironmentVariable("EnvVar") el

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

我已经拥有的:

private const string BuildPackagePath = @"\\server\build\";
我想做的是:

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

我知道asignment的左边必须是一个变量。我可能不得不更改类型,但我只是想知道是否有人能给我一个想法,使当前代码的结构保持原样。

您不能修改常量值,这就是为什么它被称为常量。但是,您可以使用
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\";
    }
}
甚至更短,使用:


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

// evaluates Environment Variable on each call
private static string BuildPackagePath 
{
    get { return Environment.GetEnvironmentVariable("EnvVar") ?? @"\server\build\"; }
}
静态只读字段将只对环境变量求值一次(但不会在启动时立即求值)

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

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

您不能修改常量值,这就是为什么它被称为常量。但是,您可以使用
readonly
指示只能在构造函数中修改成员。谢谢!我只是想检查一下,在运行时,
static readonly
将像
const
一样工作。如果你需要一个编译时常量,你当然不能使用它所以您可以使用
私有静态只读字符串BuildPackagePath=Environment.GetEnvironmentVariable(“EnvVar”)@“\\server\build\”请注意,每次调用getter时都会对其进行计算。。。如果在运行过程中设置了EnvVar,结果可能会改变。@Fildor,是的。这可能是你想要的,也可能不是。如果不是,则应该使用
静态只读
字段而不是属性,因为它只初始化一次<代码>只读
实例字段将为每个新对象重新计算EnvironmentVariable。许多选项,根据需要选择。我同意,这可能是需要的。我只是想指出这种行为是为了避免“意外”。
private static readonly string BuildPackagePath = 
        Environment.GetEnvironmentVariable("EnvVar") ?? @"\server\build\";
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;
      }
}