C语言中结构的替换# 我需要把我10年前写的C++代码移植到C语言中。我不是C#专家,有人告诉我在C#中使用结构是不好的做法 这是原来的C++结构: typedef struct TacticalLineStruct { int NumGroups; // The number of groups in the struct int GroupID[MAX_UNITS]; // which Group the vertex belongs to int EdgeList[MAX_UNITS * MAX_UNITS][2]; // An array of edges float EdgeWeight[MAX_UNITS * MAX_UNITS]; // The weight for each edge int NumBelowThreshold; POINT GroupCenter[MAX_UNITS]; // The geographical center of each group int NumEdges; } TacticalLineStruct;

C语言中结构的替换# 我需要把我10年前写的C++代码移植到C语言中。我不是C#专家,有人告诉我在C#中使用结构是不好的做法 这是原来的C++结构: typedef struct TacticalLineStruct { int NumGroups; // The number of groups in the struct int GroupID[MAX_UNITS]; // which Group the vertex belongs to int EdgeList[MAX_UNITS * MAX_UNITS][2]; // An array of edges float EdgeWeight[MAX_UNITS * MAX_UNITS]; // The weight for each edge int NumBelowThreshold; POINT GroupCenter[MAX_UNITS]; // The geographical center of each group int NumEdges; } TacticalLineStruct;,c#,c++,struct,port,C#,C++,Struct,Port,在C#中,正确的方法是什么?我不得不说,看到你们大多数人都同意struct是一种糟糕的做法,我感到非常惊讶。我强烈反对:它只是一个不同的工具,与语言提供的任何其他工具一样,有其优点和缺点。 结构是值类型< /强>,它们工作的任何值( int ,浮点, char …):它们是由副本而不是引用传递的(在C++中,它相当于一个不带符号的函数而不使用“代码> >代码>”)。 基本上,你必须知道你要用这个对象做什么。如果要通过代码库的大部分发送,那么可以考虑使用类,因为跟踪指针通常比复制整个结构快。另一方

在C#中,正确的方法是什么?

我不得不说,看到你们大多数人都同意struct是一种糟糕的做法,我感到非常惊讶。我强烈反对:它只是一个不同的工具,与语言提供的任何其他工具一样,有其优点和缺点。 结构是<强>值类型< /强>,它们工作的任何值(<代码> int ,<代码>浮点,<代码> char …):它们是由副本而不是引用传递的(在C++中,它相当于一个不带符号的函数而不使用“代码> >代码>”)。 基本上,你必须知道你要用这个对象做什么。如果要通过代码库的大部分发送,那么可以考虑使用类,因为跟踪指针通常比复制整个结构快。另一方面,如果该对象应该位于函数堆栈中以处理其他内容,那么您可能需要一个结构

无论如何,我们不能告诉你如何做你的工作:p但是我们可以给你指出一个我们认为方便的方向;但我们肯定需要更多的信息,而不仅仅是“我该怎么做?”


总之,对于“结构是一种糟糕的做法吗?”这个问题,我会回答绝对不是。你只需要知道什么时候使用它们。对于“你应该如何实施你的解决方案,考虑到你没有提出明确的问题(这可能就是你的问题被否决的原因),我不能说太多。”

为什么结构一开始就不好?VTC太宽泛:这在很大程度上取决于用法。使用类编写,结构通常是不好的做法,因为它们会复制您作为参数传递的每一种类型。@Halhex如果这是一个问题,很大程度上取决于它的用法。@zetar对于这个特定的结构,是的。关于原因,请参阅。谢谢。我很确定没有问怎么做。有人告诉我,在C#中使用结构很糟糕。这就像说在cpp中使用传递值很糟糕。是的,在大多数情况下,您希望避免复制所有内容。但在许多其他情况下,您确实希望复制!可能是为了线程安全,可能是为了数据对齐管理,也可能是为了性能(比如ECS内部)等等……在C#中,您应该从使用类开始,并且只有在特殊情况下才将其更改为结构。假设您自己的类型将像int/bool/etc一样工作肯定是不正常的。我想这是可行的。但是,由于我们不知道您想对该对象做什么,所以有点难说。@Naliwe…或FP;中的值语义)