C# 如何从列表中获取对矩形的引用

C# 如何从列表中获取对矩形的引用,c#,list,struct,C#,List,Struct,我想从列表中获取指向矩形的指针。但矩形是struct,当我试图得到指针时,我得到了copy Class MyClass { Rectangle MovingRectangle; List<Rectangle> RectangleList; Point StartLocation; ***some code here*** void PicBoxMouseDown(object sender, MouseEventArgs e) {

我想从列表中获取指向矩形的指针。但矩形是struct,当我试图得到指针时,我得到了copy

Class MyClass
{
    Rectangle MovingRectangle;
    List<Rectangle> RectangleList;
    Point StartLocation;

    ***some code here***

    void PicBoxMouseDown(object sender, MouseEventArgs e)
    {
        foreach (rectangle in RectangleList)
        {
            if (condition) 
            {
                MovingRectangle = rectangle;
                StartLocation = e.Location;
                break;
            }
        }
    }

    void PicBoxMouseMove(object sender, MouseEventArgs e)
    {
        MovingRectangle.Location =
                new Point(movingRectangle.Location.X + (e.X - StartLocation.X),
                          movingRectangle.Location.Y + (e.Y - StartLocation.Y));
    }

}
Class-MyClass
{
矩形移动矩形;
列表矩形列表;
点位;
***这里有一些代码***
void PicBoxMouseDown(对象发送器,MouseEventArgs e)
{
foreach(矩形列表中的矩形)
{
如果(条件)
{
移动矩形=矩形;
位置=e.位置;
打破
}
}
}
void PicBoxMouseMove(对象发送器,MouseEventArgs e)
{
移动矩形。位置=
新点(movingRectangle.Location.X+(e.X-StartLocation.X),
movingRectangle.Location.Y+(e.Y-StartLocation.Y));
}
}

我想更改列表中矩形的位置,但我更改了副本的位置。

存储矩形的索引,然后重新分配整个矩形,而不是存储矩形的副本

int MovingRectangleIndex;
List<Rectangle> RectangleList;
Point StartLocation;

void PicBoxMouseDown(object sender, MouseEventArgs e)
{
    for (int i = 0; i < RectangleList.Count; i++) {
        if (condition) {
            MovingRectangleIndex = i;
            StartLocation = e.Location;
            break;
        }
    }
}

void PicBoxMouseMove(object sender, MouseEventArgs e)
{
    var rect = RectangleList[MovingRectangleIndex];
    RectangleList[MovingRectangleIndex] = new Rectangle(
        rect.X + e.X - StartLocation.X,
        rect.Y + e.Y - StartLocation.Y,
        rect.Width, rect.Height);
}
int移动矩形索引;
列表矩形列表;
点位;
void PicBoxMouseDown(对象发送器,MouseEventArgs e)
{
对于(int i=0;i

这是更改列表中结构的属性的唯一方法。但是,可以更改结构数组中元素的属性。区别在于列表有一个索引器(即一对get和set方法),其中get方法返回元素的副本,而数组有一个真正的索引。也就是说,索引数组会返回数组中的位置。数组是C#编译器支持的基本类型。列表作为库中的普通类实现。C#编译器不具备列表的特定知识。

与其存储矩形的副本,不如存储矩形的索引,然后重新分配整个矩形

int MovingRectangleIndex;
List<Rectangle> RectangleList;
Point StartLocation;

void PicBoxMouseDown(object sender, MouseEventArgs e)
{
    for (int i = 0; i < RectangleList.Count; i++) {
        if (condition) {
            MovingRectangleIndex = i;
            StartLocation = e.Location;
            break;
        }
    }
}

void PicBoxMouseMove(object sender, MouseEventArgs e)
{
    var rect = RectangleList[MovingRectangleIndex];
    RectangleList[MovingRectangleIndex] = new Rectangle(
        rect.X + e.X - StartLocation.X,
        rect.Y + e.Y - StartLocation.Y,
        rect.Width, rect.Height);
}
int移动矩形索引;
列表矩形列表;
点位;
void PicBoxMouseDown(对象发送器,MouseEventArgs e)
{
对于(int i=0;i

这是更改列表中结构的属性的唯一方法。但是,可以更改结构数组中元素的属性。区别在于列表有一个索引器(即一对get和set方法),其中get方法返回元素的副本,而数组有一个真正的索引。也就是说,索引数组会返回数组中的位置。数组是C#编译器支持的基本类型。列表作为库中的普通类实现。C#编译器对列表没有专门的知识。

我在代码中没有看到“更改列表中矩形的位置”。但是,更改矩形在列表中的位置的方法是将其从旧位置移除,然后插入新位置。复制一个矩形(这就是它所需要的)比复制一个引用(如果矩形是一个类而不是一个结构,您会做什么)要做的工作不多,您可以而且可能应该使用rectangle和代码中已有的一些其他字段创建一个类。永远为成长做计划!我在代码中没有看到“更改列表中的矩形位置”。但是,更改矩形在列表中的位置的方法是将其从旧位置移除,然后插入新位置。复制一个矩形(这就是它所需要的)比复制一个引用(如果矩形是一个类而不是一个结构,您会做什么)要做的工作不多,您可以而且可能应该使用rectangle和代码中已有的一些其他字段创建一个类。永远为成长做计划!