C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: switch文ないでインスタンスの使いまわし?


(過去ログ 96 を表示中)

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■57536 / inTopicNo.1)  switch文ないでインスタンスの使いまわし?
  
□投稿者/ TAKE (38回)-(2011/03/03(Thu) 14:26:45)

分類:[C#] 

まとまった時間がとれなく
以前の投稿に返答をまだ書けていないのですが
ちょっと気になったことがあったので
投稿してみました。

下記のようなコードを書いたら
エラーで怒られたのですが
以下のようにswitch文内で
itemを共有して使ってはいけないのでしょうか?

switch (Mode)
{
    case FILE_A:
        A_Item item = new A_Item();
        item = FileLoad_A(item)
        break;
    case FILE_B:
        B_Item item = new B_Item();
        item = FileLoad_B(item)
        break;
    case FILE_C:
        C_Item item = new C_Item();
        item = FileLoad_C(item)
        break;
}

引用返信 編集キー/
■57537 / inTopicNo.2)  Re[1]: switch文ないでインスタンスの使いまわし?
□投稿者/ マサヤ (269回)-(2011/03/03(Thu) 14:55:13)
>item = FileLoad_A(item)
A_ItemとFileLoad_A関数が何かはわかりませんが、ここがおかしいのではないでしょうか?
FileLoad_Aの引数にインスタンスを生成しただけのitemを使用しておりますが、平気なのでしょうか?


引用返信 編集キー/
■57538 / inTopicNo.3)  Re[2]: switch文ないでインスタンスの使いまわし?
□投稿者/ しるふぃん (2回)-(2011/03/03(Thu) 15:11:55)
> エラーで怒られたのですが
>
まずは、どのようなエラーが出ているのかがわかりません。

既に定義されているというエラー内容ですか?
引用返信 編集キー/
■57539 / inTopicNo.4)  Re[1]: switch文ないでインスタンスの使いまわし?
□投稿者/ みきぬ (955回)-(2011/03/03(Thu) 15:38:12)
> 下記のようなコードを書いたら
> エラーで怒られたのですが
> 以下のようにswitch文内で
> itemを共有して使ってはいけないのでしょうか?
> 

理由まではわかりませんが、どうもそうっぽいです。
↓自分がよくやる手

switch (Mode)
{
    case FILE_A:
        {
            A_Item item = new A_Item();
            item = FileLoad_A(item);
            break;
        }
    case FILE_B:
        {
            B_Item item = new B_Item();
            item = FileLoad_B(item);
            break;
        }
    case FILE_C:
        {
            C_Item item = new C_Item();
            item = FileLoad_C(item);
            break;
        }
}

引用返信 編集キー/
■57540 / inTopicNo.5)  Re[3]: switch文ないでインスタンスの使いまわし?
□投稿者/ PATIO (89回)-(2011/03/03(Thu) 15:41:01)
2011/03/03(Thu) 15:45:36 編集(投稿者)


まず、エラー内容は正確に提示しましょう。
エラーになりましたでは状況が全く伝わりません。
あと、使っている開発環境をエディッションとバージョン込みで提示しましょう。
状況によってはバージョンの違いなどで挙動が違うケースもありえます。

で、変数のスコープと言うのを入門書等で見直してみてください。
同じスコープ内で同名の変数が何回も定義されたら困るよねと言う部分が
理解できていれば、今回のような疑問は出てこないはずです。
エラーの内容とC#の文法は対応する部分が多いです。
特にプログラミングを始めた頃のコンパイルエラーはその傾向が強いので
エラーが出たら入門書でC#の文法について見直す事をお勧めします。

ちなみにですが、
今回のような使い方は使い回しとは言わないと思います。
使い回しと言うのは宣言は一つでその変数を色々な所で
別の用途に使う場合を言うはずです。
宣言が三つある時点で使いまわしとは言えないと思います。

引用返信 編集キー/
■57543 / inTopicNo.6)  Re[2]: switch文ないでインスタンスの使いまわし?
□投稿者/ TAKE (39回)-(2011/03/03(Thu) 16:43:30)
書込み時点でソースを直してしまったので
エラー内容は書けませんですいません。

即席で試しましたが、エラーは
ローカル変数 'item' はこのスコープで既に定義されています。
ですね。

同じ定義が何回も定義はされてますが
処理上ではひとつしか通らないので
よいかなっと思いましたが駄目なようですね。


引用返信 編集キー/
■57550 / inTopicNo.7)  Re[3]: switch文ないでインスタンスの使いまわし?
□投稿者/ shu (495回)-(2011/03/03(Thu) 22:43:17)
1組の{}で囲まれた範囲で同じ名前の変数宣言を行うことは出来ません。

引用返信 編集キー/
■57556 / inTopicNo.8)  Re[4]: switch文ないでインスタンスの使いまわし?
□投稿者/ GOD (4回)-(2011/03/04(Fri) 09:33:54)
2011/03/04(Fri) 09:34:13 編集(投稿者)
No57550 (shu さん) に返信
> 1組の{}で囲まれた範囲で同じ名前の変数宣言を行うことは出来ません。
> 
説明が微妙すぎです。(1の事例に対してのみ言っているのでしょうが、2の事例には当てはまらない)
私は2008EE使ってるけど他のバージョンだと大丈夫なのかな?

・1(funcという一組の{})
private void func(){
  int x;
    :
    :
  String x;
}

・2
class...{
  private int x = 99;
  private void func() {
    int x = 0;  // func{}外で宣言されていてもOK
    int y = 0;
    Console.WriteLine(x);
    if (y == 0) 
    {
      String x = "";  // if{}外で宣言されているからNG
      Console.WriteLine(x);
    }
  }
}

引用返信 編集キー/
■57557 / inTopicNo.9)  Re[5]: switch文ないでインスタンスの使いまわし?
□投稿者/ shu (496回)-(2011/03/04(Fri) 10:30:51)
No57556 (GOD さん) に返信
> 2011/03/04(Fri) 09:34:13 編集(投稿者)
>
> ■No57550 (shu さん) に返信
>>1組の{}で囲まれた範囲で同じ名前の変数宣言を行うことは出来ません。
>>
> 説明が微妙すぎです。(1の事例に対してのみ言っているのでしょうが、2の事例には当てはまらない)
> 私は2008EE使ってるけど他のバージョンだと大丈夫なのかな?

では、1組の入れ子になっていない{}で囲まれた範囲ということにしときます。入れ子の場合はGODさんが指摘の
ようにケースにより変わってしまいますね。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -