用C#替换结构

时间:2019-04-04 15:02:12

标签: c# c++ struct port

我需要将我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#中执行此操作的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

不得不说,对于大多数人都同意struct是一种不好的做法,我感到非常惊讶。我非常不同意:它只是一种不同的工具,它的优缺点与其他语言所提供的一样。 结构是值类型,它们的工作方式与任何值(intfloatchar ...)相似:它们通过复制而不是通过引用传递(在C ++中,它等效于在不使用与号&的情况下获取参数的函数。

基本上,您必须知道该对象的用途。如果要通过代码库的大部分发送它,则可以考虑使用一个类,因为跟随指针通常比复制整个结构更快。另一方面,如果应该将此对象放在函数堆栈中以处理其他内容,则可能是您需要的结构。

无论如何,我们无法告诉您如何完成工作:p但是,我们可以为您指明我们认为方便的方向;但是我们肯定需要更多的信息,而不仅仅是“我该怎么做?”。

总而言之,对于“构造不良行为吗?”这个问题,我会回答绝对不是。您只需要知道何时使用它们。对于“您应该如何实施解决方案,”隐含的问题,考虑到您没有提出明确的问题(这可能是您的问题被否决的原因),我不能说太多