当我尝试从现有应用程序编写 C# 应用程序但在 Delphi 中开发时, 非常艰难,但设法解决了一些问题,但现在我遇到了一个问题......
Delphi 代码包含以下代码:
type
TFruit = record
name : string[20];
case isRound : Boolean of // Choose how to map the next section
True :
(diameter : Single); // Maps to same storage as length
False :
(length : Single; // Maps to same storage as diameter
width : Single);
end;
即一个变体记录(里面有 case
语句),因此记录被构造,它的大小也是如此。
另一方面,我正在尝试在 C# struct 中做同样的事情,但还没有成功,我希望有人能在这里帮助我。
所以请告诉我是否有任何方法可以在 C# 中实现它。
提前致谢....
最佳答案
您可以使用显式结构布局来复制此 Delphi 变体记录。但是,我不会打扰,因为您似乎不太可能真的希望分配给 diameter
也分配给 length
,反之亦然。 Delphi 记录声明看起来像是 1990 年代中期的 Delphi 编码风格。现代 Delphi 代码很少会以这种方式编写。
我会这样做:
struct Fruit
{
string name;
bool isRound;
float diameter; // only valid when isRound is true
float length; // only valid when isRound is false
float width; // only valid when isRound is false
}
一个更优雅的选择是为每个结构字段创建一个具有属性的类。如果为 isRound
的无效值访问它们,您会安排 3 个 float 的属性 getter 和 setter 引发异常。
关于c# - 将 Delphi 变体记录转换为 C# 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9331751/