C#访问struct静态成员报错“无法使用实例引用”如何解决?
错误原因
Obstacle结构体中的x1/y1/x2/y2属性被错误标记为了static(静态成员)。静态成员归类型所有,不属于单个结构体实例,因此你通过列表内的实例访问静态成员就会触发该报错。
此外你当前的写法还有逻辑隐患:静态成员的数值是全局共享的,每次新建Obstacle实例赋值时,都会覆盖之前所有实例的坐标值,就算语法不报错也无法实现存储多个不同障碍物坐标的需求。
解决方法
修改Obstacle结构体的属性定义,移除static关键字,改为实例成员即可:
struct Obstacle { // 移除所有属性前的static修饰符 public int x1 { get; set; } public int y1 { get; set; } public int x2 { get; set; } public int y2 { get; set; } public Obstacle(int X1, int Y1, int X2, int Y2) { x1 = X1; y1 = Y1; x2 = X2; y2 = Y2; } }
修改完成后你原有循环的访问逻辑不需要做任何调整,即可正常运行。
内容的提问来源于stack exchange,提问作者curiousMind_85
相关产品推荐
相关产品推荐

