首页 > 解决方案 > 在 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#c++structport

解决方案


我不得不说,看到你们中的大多数人都同意 struct 是一种不好的做法,我感到非常惊讶。我强烈反对:它只是一个不同的工具,它的优点和缺点与该语言提供的任何其他工具一样。结构是值类型,它们的工作方式与任何值 ( int, float, char...) 一样:它们通过复制而不是通过引用传递(在 C++ 中,它相当于一个函数接受参数而不使用 & 符号&)。

基本上,您必须知道要使用该对象做什么。如果您打算通过大部分代码库发送它,也许可以考虑使用一个类,因为跟随指针通常比复制整个结构更快。另一方面,如果该对象应该存在于函数堆栈中以处理其他一些东西,那么您可能需要一个结构。

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

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


推荐阅读