我正在使用一些简单代码来存储对象的 2D 位置时遇到一些奇怪的行为。
我创建了一个名为 SizeD 的类,其中包含 double 宽度和高度。
代码:
public class SizeD
{
internal Double Width;
internal Double Height;
/// <summary>
/// Creates a new instance of SizeD
/// </summary>
public SizeD(Double Width, Double Height)
{
this.Width = Width; this.Height = Height;
return;
}
}
这很直接,我没想到这门课会发生什么特别的事情。
还有一个包含其中一些预定义类的静态数组,以便于使用。
代码:
internal static SizeD[] PaperTypeSize = //Converts CM to points.
{
new SizeD(8.5 * 72, 11.0 * 72),
new SizeD(8.5 * 72, 14.0 * 72),
new SizeD(21.0 * (72 / 2.54), 29.7 * (72 / 2.54))
};
我遇到的问题是 SizeD 中的值经常在运行时翻转。
1:宽度=宽度,高度=高度。
2:宽=高,高=宽。
对于重复模式 (1,2,1,2,1,2) 等也会发生这种情况。
有人能给我解释一下这里发生了什么吗?
谢谢你的时间!
编辑: 它主要发生在尝试读取此值 SizeD(21.0 * (72/2.54), 29.7 * (72/2.54)) 时。
最佳答案
使用属性使您的字段只读:
public class SizeD
{
public double Width { get; private set; };
public double Height { get; private set; };
/// <summary>
/// Creates a new instance of SizeD
/// </summary>
public SizeD(double width, double height)
{
this.Width = width;
this.Height = height;
}
}
现在,您的代码只能创建只读实例。检查编译错误的位置。其中一个地方是 buggy 并且错误地更改了值。考虑一个大小不可变的设计,这将防止这些错误。它并不总是合适的,但这只有您可以根据您在程序中使用此类来决定。
关于C# 数组值以恒定模式翻转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19770358/