c# - 如何创建与 Rectangle 兼容的自定义结构?

标签 c# struct custom-fields

我想创建一个 Rectangle 结构,它具有用于 x、y、宽度和高度字段的 byte 而不是 int。它应该与通常的 Microsoft.Xna.Framework.Rectangle 兼容(转换为 (bytesRectangle) 应该没问题)。我该怎么做?

更新:使用这个结构帮助我为每个图 block 节省了 12 个字节。

最佳答案

我很想知道实现此结构的设计选择。查看 Microsoft.Xna.Framework.Rectangle,我们看到有 30 多个属性和成员。为了节省几个字节,需要重现很多内容。如果您的唯一目标是保存一些字节,那么可能有更好的方法。例如,如果您想将数据保存在较小的空间中,您可以定义一个对象和一个转换来存储它。像这样:

class SmallRectangle
{
    public byte x { get; set; }
    public byte y { get; set; }

    public SmallRectangle(byte inx, byte iny)
    {
       x = inx;
       y = iny;
    }

    public static explicit operator SmallRectangle(Microsoft.Xna.Framework.Rectangle big)
    {
        SmallRectangle small = new SmallRectangle((byte)big.x, (byte)big.y);

        return small;
    }

    public WriteToFile(FileStream out)
    {
       //....
    }
}

当然,完整的实现将包括测试以确保在转换等方面没有数据丢失。

根据您在下面的评论:这不是前进的方向。如果您在使用 XNA 时确实需要通过 XNA 节省内存,那么您应该制作一个小矩形管理器类,该类不会以相同的方式使用相同的属性存储它们。但是这个类擅长在您需要时创建 XNA 类。不要让小矩形类(或管理器)“兼容”。

在内存中存储所需数据的最佳方法是只存储四个字节而没有开销。无开销地存储两个字节的最佳方法是使用 Tuple 类。

所以我建议您创建一个矩形管理器类,在内部将矩形存储为元组,然后根据需要将它们“装箱”和“拆箱”到 Xna 对象中。

关于c# - 如何创建与 Rectangle 兼容的自定义结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11976602/

相关文章:

c# - XAML 热重载不断停止。可能是什么问题?

c# - MVVM 属性取决于对象图

c# - xml 元素列表到公共(public)基类型的数组

c++ - 在 C++ 中传递结构数组 - 被调用函数中不存在结构元素,如何正确传递 vector ?

c - 获取结构体调用函数的指针

php - 在 WooCommerce 存档页面上获取并显示产品自定义字段

c# - 不支持文化

c++ - 调用遗留 C API 时,如何在现代 C++ 中正确地将指向结构的指针转换为指向其他结构的指针?

Django自定义字段-自动添加COLLATE到查询

php - 将自定义产品元数据传递给 Woocommerce 3 中的订单