1

我有一段代码遍历 XML 属性:

string groupName;
do
{
    switch (/* ... */)
    {
        case "NAME":
            groupName = thisNavigator.Value;
            break;
        case "HINT":
            // use groupName

但是这样我得到了使用未分配变量的错误。如果我为 groupName 分配了一些东西,那么我无法更改它,因为这就是字符串在 C# 中的工作方式。任何解决方法?

4

5 回答 5

8

你是对的,字符串在 .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
于 2011-12-04T19:46:55.177 回答
2

您的 是否defaultswitch赋值groupName?如果不是,那么这将导致错误。

switch
{
  case "NAME":
    groupName = thisNavigator.Value;
    break;
  //...
  default:
    groupName = "something";
    break;
}
于 2011-12-04T19:48:48.217 回答
1
string groupName = string.Empty;

只需分配一个空字符串,你应该是 okej。

于 2011-12-04T19:47:08.360 回答
1

编译器不知道你的 switch 语句的上下文(例如,不能保证 switch 总是匹配一个大小写)。

因此,groupName即使在切换之后也可能保持未分配状态。

您可以在 switch 语句中实例化groupNameString.Empty使用default:

于 2011-12-04T19:47:30.130 回答
1

在每种情况下设置 groupName并在 switch 语句中使用默认键或在 switch之前将 groupName 分配为 null 。

于 2011-12-04T19:48:28.187 回答