c# - 在 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# 中执行此操作的正确方法是什么?
解决方案
我不得不说,看到你们中的大多数人都同意 struct 是一种不好的做法,我感到非常惊讶。我强烈反对:它只是一个不同的工具,它的优点和缺点与该语言提供的任何其他工具一样。结构是值类型,它们的工作方式与任何值 ( int
, float
, char
...) 一样:它们通过复制而不是通过引用传递(在 C++ 中,它相当于一个函数接受参数而不使用 & 符号&
)。
基本上,您必须知道要使用该对象做什么。如果您打算通过大部分代码库发送它,也许可以考虑使用一个类,因为跟随指针通常比复制整个结构更快。另一方面,如果该对象应该存在于函数堆栈中以处理其他一些东西,那么您可能需要一个结构。
在任何情况下,我们都无法告诉您如何完成您的工作:p 但是,我们可以为您指出我们认为方便的方向;但我们肯定需要更多信息,而不仅仅是“我该怎么做?”。
总之,对于“结构是不好的做法吗?”这个问题,我绝对不会回答。您只需要知道何时使用它们。对于“你应该如何实施你的解决方案”这个隐含的问题,考虑到你没有提出一个明确的问题,我不能说太多(这可能是你的问题被否决的原因)
推荐阅读
- jquery - Django 变量形式
- c# - ServiceStack 自动处理
- c# - 应该很简单,但不知何故不是
- apache-kafka - Kafka 生产者无法通过 Internet 连接到代理。如果在本地网络中作为代理运行良好。从 Internet 工作的 Telnet 连接
- python - 计算跨列的值,然后按年分组熊猫
- node.js - ERROR IN NODE 配置中缺少凭证,如果使用 AWS_CONFIG_FILE,请设置 AWS_SDK_LOAD_CONFIG=1
- python - youtube_dl 错误:无法解析 JSON(由 JSONDecodeError('期望值:第 1 行第 1 列(字符 0)')引起)disocrd 错误
- python - 为什么我的变量有这么多引用计数?
- python - Selenium 无法从元素中获取文本
- java - 如何从键盘和文件中读取?