- PR -

foreach の変数は読み取り専用なんですか?

投稿者投稿内容
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-08-10 15:02
foreach で以下のように代入する方法は無いのでしょうか?
コード:

List<string> programCode;

public void CodeConvert() {
foreach(string s in this.programCode) {
s = "aaa";
}
}


http://msdn2.microsoft.com/ja-jp/library/369xac69.aspx
によれば、無理とあります。

皆さんは、どうしているとか、こう書くとわかりやすいよ〜、というのがあれば教えていただけないでしょうか?


[ メッセージ編集済み 編集者: R・田中一郎 編集日時 2006-08-11 13:17 ]
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2006-08-10 15:16
そんなことをしたい理由が分かりませんが(^_^;
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-08-10 15:22
引用:

mioさんの書き込み (2006-08-10 15:16) より:
そんなことをしたい理由が分かりませんが(^_^;



List<string> programCodeの全要素を "aaa" で埋めたいという前提の話です。
本当に "aaa" で埋まると勿論困る訳ですが。

ぽぴ王子
ぬし
会議室デビュー日: 2006/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2006-08-10 15:23
こんにちは。
久しぶりにR・田中一郎さんのこだわりスレがっ!

自分なりに二案考えてみました。

案(1) ベタな方法を取ってみる案

コード:

List<string> programCode;

public void CodeConvert()
{
    for(int i=0; i < this.programCode.Count; i++)
    {
        if (this.programCode[i] == "mosamosa")
        {
            this.programCode[i] = "aa";
        }
    }
}



案(2) でもちょっとカコワルイ気もする案

コード:

List<string> programCode;

public void CodeConvert()
{
    List<string> replaceCode = new List<string>();
    foreach(string s in this.programCode)
    {
        if (s == "mosamosa")
        {
            replaceCode.Add("aa");
        }
        else
        {
            replaceCode.Add(s);
        }
    }
    this.programCode = replaceCode;
}


んー…(1)案は何か退化している感じがしてアレなので、自分だったら(2)案
にしますかね。

引用:

mioさんの書き込み (2006-08-10 15:16) より:

そんなことをしたい理由が分かりませんが(^_^;


Σ(゚д゚lll)ガーン!!
ひていされた・・・
(どこでもいっしょのトロ風に読んでください)
_________________
ぽぴ王子@わんくま同盟
ぽぴ王子の人生プログラミング中 / ぽぴンち。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-08-10 15:29
申し訳ないですが、私は否定派です。

引用:

R・田中一郎さんの書き込み (2006-08-10 15:22) より:

List<string> programCodeの全要素を "aaa" で埋めたいという前提の話です。
本当に "aaa" で埋まると勿論困る訳ですが。


foreach で、この処理はナンセンスですね。

foreach の本来の強みは何だと思いますか?
for に置き換えることができるのにも関わらず、なぜ必要だと考えていますか?
開発者のタイプを減らすためだけだと考えていませんか?

[ 編集 : 1 行目の "~~~ さんに同意" という記述を削除 ]

[ メッセージ編集済み 編集者: じゃんぬねっと 編集日時 2006-08-10 15:45 ]
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2006-08-10 15:29
>List<string> programCodeの全要素を "aaa" で埋めたいという前提の話です。
なるほど。
しかし、列挙するための機能を使って置換という発想が、違う気がします。

というわけで、私もぽぴ王子さんの案(2)でやると思います。
条件が2つなら三項演算で書くかも、というくらい。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2006-08-10 15:33
sはprogramCodeから取り出した値ですから、その変数sを変えてもprogramCodeの値は変わりませんよね。

for (int i = 0; i < programCode.Count; i++)
{
programCode[i] = "aaa";
}

単純にこれでいいと思います。
まどか
ぬし
会議室デビュー日: 2005/09/06
投稿数: 372
お住まい・勤務地: ますのすし管区
投稿日時: 2006-08-10 15:34
問題はなぜできないかですよね。
不定な列挙の途中でそのものを変更しようとしているからでしょう。
#Stringクラス

コード:
For Each v As String In MyStringList
    StringValue = "ABC"
Next

For Each s As ValueClass In MyValueList
    s.StringValue = "ABC"
Next



ぽぴ王子さんも書かれている(1)は、不定では無く「特定」していますし
その特定されたItemプロパティを変更しているのでOKなのでしょう。

スキルアップ/キャリアアップ(JOB@IT)