我有一节课:
我想访问这些默认字符串,但C#编译器不喜欢组合Const来创建Const。
public class cGlobals
{
// Some Default Values
public class Client
{
public const string DatabaseSDF = "database.sdf";
public const string DatabaseDir = "database";
public const string DatabaseFullLocation = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),
DatabaseDir);
public const string DataSource = Path.Combine(DatabaseDir, DatabaseSDF);
}
}
有没有更好的方法而不是硬编码字符串?我想使用Special Folders和Path.Combine。
由于
答案 0 :(得分:8)
您必须使用static readonly
代替const
,因为const
必须在编译时成为常量。
此外,常量实际上将被编译为使用它们的程序集,因此如果您从其他程序集引用这些字段,则必须在更改常量时重新编译它们。 static readonly
字段不会发生这种情况。无论哪种方式,这都是一个更好的主意:)
我实际上已经问过这个问题,我建议您阅读并接受答案:static readonly vs const。
答案 1 :(得分:4)
对于要声明的变量const
,指定的值必须是编译时常量;要使用方法调用的结果,您需要更改变量声明:
public static readonly string DataSource = ...;
如果你考虑一下,这个不是编译时常量,因为它会根据你运行它的操作系统给出不同的结果。它在单个执行中是常量,而不是“常规”常量。
答案 2 :(得分:4)
只是添加到其他正确的答案:一个常量应该在逻辑上是在所有时间和所有地方不变的。像十几个鸡蛋的数量,铅的原子序数等等。随着时间的推移而变化的价值,如欧盟国家的数量,或以澳元计算的金衡盎司黄金的价格,不应被建模为常数。
在你的情况下,所有时间和所有地方的值都不是逻辑上恒定的,所以不要试图使用常量。
答案 3 :(得分:3)
您可以使用readonly
代替const
。
您还可以使用app.config
来存储配置设置。
答案 4 :(得分:2)
我担心你必须使用
static public readonly string DatabaseFullLocation = Path.Combine(/* ... */);
代替;
答案 5 :(得分:2)
就个人而言,我根本不会对字符串进行硬编码。
我将它们放入appSettings。
为什么呢?好吧,如果您需要更改这些值,则需要重新编译代码。将它们作为appSettings放入将允许您只更改配置文件。
您仍然可以通过班级提供访问者。
public string DatabaseSDF
{
get
{
return System.Configuration.ConfigurationManager.AppSettings["DatabaseSDF"];
}
}
两全其美,imo。
答案 6 :(得分:1)
const类型必须在编译时识别,在你的代码中 试图调用Path.Combine 运行时找出实际的 路径。你无法更新const 运行强>
答案 7 :(得分:0)
在“应用程序设置”中,您可以保留这些常量。
在项目属性中,选择“设置”选项卡。在网格中,您可以设置常量。
即使在运行时也可以设置这些变量。
Message.show(My.Settings.YourVariable); //you will get the value
并由
设置 My.Settings.YourVariable="Vibin";
My.Settings.Save()
我认为这是最好的方式之一。
答案 8 :(得分:0)
定义常量类。 用 - >表示所有变量public static readonly string Name_Of_Var =“Any value”
从GetDirectory方法 - 定义您需要访问的文件夹的代码 例如:Path.Combine(GetFolderPath(Environment.SpecialFolder。“选择文件夹名称”),常量名称)
完成。