我正在部分修改一个应用程序,我需要将以下常量的值设置为环境变量的值(如果存在)。
我已经拥有的东西:
private const string BuildPackagePath = @"\\server\build\";
我想做的是:
if (Environment.GetEnvironmentVariable("EnvVar") != null)
Set the property value to = Environment.GetEnvironmentVariable("EnvVar")
else
{Keep default/assigned value}
据我所知,对齐的左侧必须是变量。我可能不得不改变类型,但只是想知道是否有人可以给我一个想法,所以当前代码的结构可以保持原样。
答案 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;
}
}