0

このコードに問題があります

私はこの構造を持っています

public struct bounds
{
        public int xmax = 0;
        public int xmin = 0;
        public int ymax = 0;
        public int ymin = 0;        
};

そして私はそれからリストを作ります

List<bounds> map = new List<bounds>(); 

空間 (またはオブジェクト) の境界を 2D 配列 (その xmax、xmin、ymin、および ymax) に格納しようとしています。この整数 y 変数は、このコードに到達すると何らかの数値になりますが、リスト「マップ」に関連付けられたコードの下に赤い線が表示され続けます(iとjは2D配列を通過するためのカウンターです)

if(!(map.Contains(y)))  //if the list doesn't already have this number
{    
   map.Add(y);
   map[y].xmax = i;    //and set its xmax, xmin, ymax, ymin
   map[y].xmin = i;
   map[y].ymax = j;
   map[y].ymin = j;
}

if(map[y].xmax < j)     // if its already in the list look at the current 
   map[y].xmax = j;    //  boundaries and decide if new ones should be set

if(map[y].xmin > j)
   map[y].xmin = j;

if (map[y].ymax < j)
    map[y].ymax = i;

if(map[y].ymin > j)
   map[y].ymin = i;
4

3 に答える 3

3

この理由は、構造体が値型であるためです。

リストから構造体を読み込んでいるときは、コピーを取得しています

そのため、このコード行 (およびそれに似たものすべて):

map[y].xmax = i;

リストから取り出したコピーを変更しています。

コピーを手動で取得して変更し、リストに戻すことで、これに対抗できます。

注: 可変構造体はあらゆる種類の問題を引き起こします。あなたが抱えている問題はそれらの1つにすぎませんが、それらを可変にするべきではありません。

また、注意してください:構造体の値自体をリストへのインデクサーとして使用しています。これはエラーであり、実際にはインデックス変数を使用していると思います。そうしないと、実際に問題が発生します。

ただし、ここに一般的なヒントがあります。Visual Studio がコードの下に赤い波線を描画している場合は、マウスをその上に置くと、何が問題なのかを示すツールヒントが表示されます。わかりにくいかもしれませんが、エラー メッセージはググって簡単に検索できます。

赤い波線の例

于 2013-07-06T18:46:38.770 に答える
0

インデクサーを使用するListには、int を渡す必要があります。boundsここで構造体を渡しています

map[y].xmax = i;

yアクセスするインデックスを表す int である必要があります。yあなたが使用したので、私は境界構造体であると推測しています

map.Add(y);

そしてあなたmapはタイプList<bounds>です。

于 2013-07-06T18:46:22.417 に答える