现在我有一个 const 字符串数组并循环检查是否存在一个值。但我想要一种更有效的方式来存储我的价值观。我知道有一个哈希集可以这样使用:
HashSet<string> tblNames = new HashSet<string> ();
tblNames.Add("a");
tblNames.Add("b");
tblNames.Add("c");
Run Code Online (Sandbox Code Playgroud)
但是,是否可以像这样使它成为我班级的常量成员:
public const HashSet<string> tblNames = new HashSet<string>() { "value1", "value2" };
Run Code Online (Sandbox Code Playgroud) 我在C#类中有以下只读字符串.
private readonly string someString= "I am a string.";
Run Code Online (Sandbox Code Playgroud)
我觉得将此转换为a的冲动是const因为信息在编译时可用.但是,我有它readonly因为我在非静态上下文中使用它.
这是正确的做法吗?或者我的代码设计有问题?
我想在我的班级中声明一个变量,以后不能像这样更改:
obj myobj=new obj()
myobj.CONSTANT_VAR="Changed value" //ERROR!!
Run Code Online (Sandbox Code Playgroud)
...但其值可以像这样访问:
Console.WriteLine(myobj.CONSTANT_VAR)
Run Code Online (Sandbox Code Playgroud)
我尝试了以下方法:
public class obj{
public int a, b;
public const string CONSTANT_VAR;
public obj(int x,int y){
a=x;
b=y;
CONSTANT_VAR=1/(a*((""+a).Length)+3/(b*((""+b).Length)).ToString();
}
public int do(){
return this.a+this.b-(CONSTANT_VAR).Length;
}
}
class DriverClass(){
static void Main(){
obj myObj=new obj(2,3);
myObj.a=34;
myObj.b=35;
myObj.CONSTANT_VAR="changed ur string lol"; //i want it to print error
Console.WriteLine(CONSTANT_VAR); //no error
Console.WriteLine(myObj.add());
}
}
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误消息:
constants must have a value assigned
Run Code Online (Sandbox Code Playgroud)
但我不想事先给它赋值..... 我该怎么办?