String是一种引用类型,即使它具有值类型的大多数特性,例如是不可变的并且具有==重载以比较文本而不是确保它们引用相同的对象.
为什么字符串不是一个值类型呢?
关于这个问题有很多问题,但没有一个(除了一个,但仍然是一个短的)正在处理以下场景.
来自C#4书:

马克还写道:
如果更改const的值,则需要重建所有客户端
题 :
1)为什么?是static readonly和const- static?
2)实际值保存在哪里?
3)如何使一个领域static readonly实际上solve这个问题"落后于现场"?
fieldInfo类中的SetFields方法将对象作为第一个参数.有没有办法在C#中使用反射来更改静态只读字段的值?
到目前为止我有
var field = typeof(ClassName).GetField("FieldName",BindingFlags.Instance|BindingFlags.NonPublic);
Run Code Online (Sandbox Code Playgroud) 现在我有一个 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)