C# 数组值以恒定模式翻转

标签 c# arrays class behavior



我正在使用一些简单代码来存储对象的 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/

相关文章:

javascript - 如何在 HTML 表单中显示下一项

c++ - 使用结构和指针数组 C++

c# - 将 XmlNode 添加到 XmlElement

c# - 如何将组合硬编码片段转换为递归函数?

python 将数组拆分为运行/序列 - 最好是 numpy

jquery - 在 jQuery 的 .closest() 中使用类名

javascript - 如何设置具有继承+私有(private)属性+getters/setters的javascript类

PHP 类 : Global variable as property in class

c# - DataGrid 中的 TextWrapping

来自 IEnumerable<KeyValuePair<int, string>> 的通用 GetOnlyKeys 的 C# 扩展方法