当我试图从现有的应用程序编写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;
Run Code Online (Sandbox Code Playgroud)
即一个变体记录(case内部声明),因此也构建了记录及其大小.另一方面,我试图在C#struct中做同样的事情,但还没有成功,我希望有人能在这里帮助我.所以,请告诉我是否有任何方法可以在C#中实现这一点.提前致谢....
您可以使用显式结构布局来复制此Delphi变体记录.但是,我不会打扰,因为你似乎不太可能想要赋值diameter给它length,反之亦然.Delphi记录声明看起来像是20世纪90年代中期的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
}
Run Code Online (Sandbox Code Playgroud)
更优雅的选项是具有每个struct字段属性的类.并且你会安排3个浮点数的属性getter和setter引发异常,如果它们被访问的值无效isRound.