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 ステートメントでインスタンス化または使用できgroupNameますString.Emptydefault:

于 2011-12-04T19:47:30.130 に答える
1

それぞれの場合に groupName を設定し、switch ステートメントでデフォルトキーを使用するか、switch のに groupName を null に割り当てます。

于 2011-12-04T19:48:28.187 に答える