我有一段迭代XML属性的代码:
string groupName;
do
{
switch (/* ... */)
{
case "NAME":
groupName = thisNavigator.Value;
break;
case "HINT":
// use groupName
但是这样我得到了使用未分配变量的错误。如果我给groupName分配了一些东西,那么我就无法改变它,因为这就是字符串在C#中的工作方式。任何解决方法?
答案 0 :(得分:7)
你是对的 strings 在.NET中是不可变的,但你假设字符串变量不能改变是错误的。
这是有效的:
string groupName = null;
groupName = "aName";
groupName = "a different Name";
如果您执行以下操作,您的代码将不会出现错误:
string groupName = string.Empty; // or null, if empty is meaningful
do
{
switch (/* ... */)
{
case "NAME":
groupName = thisNavigator.Value;
break;
case "HINT":
// use groupName
答案 1 :(得分:2)
default
的{{1}}是否为switch
分配了值?如果没有,则会导致错误。
groupName
答案 2 :(得分:1)
string groupName = string.Empty;
只需指定一个空字符串,你应该是okej。
答案 3 :(得分:1)
编译器不知道你的switch语句的上下文(例如,不能保证交换机总是匹配一个案例)。
因此即使在切换之后,groupName
也可能保持未分配状态。
您可以使用groupName
实例化String.Empty
或在切换语句中使用default:
。
答案 4 :(得分:1)
在每个案例中设置groupName,并在switch语句中使用默认键,或者在切换之前将groupName指定为null 。