【发布时间】:2016-03-09 13:11:39
【问题描述】:
我正在构建一个应用程序,让我可以从我的 PC 控制我的 Android 设备。它运行得很好,所以现在我想开始清理我的代码以供发布。我正在尝试清理我不需要的解决方案引用,因此我查看了用于实现Point 类的using System.Drawing;。问题是,如果我切换到使用二维 Int32 数组,我真的不需要它。
所以我可以:new Int32[,] {{200, 300}}; 而不是 new Point(200, 300); 并完全摆脱 System.Drawing 命名空间。问题是:这真的重要吗?通过保留System.Drawing 命名空间,我是否真的在我的应用程序中引入了膨胀? Int32[,] 是否更轻量级?
或者,我是否应该不使用任何一个,只跟踪单个 Int32 变量中的 x,y 坐标?
编辑:我摆脱了我写的原始想法:Int32[200, 300] 并用new Int32[,] {{200, 300}}; 替换它,因为正如@Martin Mulder 指出的Int32[200, 300]“创建一个二维数组60000个整数,都是0。”
EDIT2:所以我很笨。首先,我试图通过使用多维数组来幻想太多。彻头彻尾的愚蠢。其次,我接受了使用结构的建议,并且一切正常,所以感谢前四个答案;他们每个人都是正确的。但是,毕竟,我最终无法删除 System.Drawing 引用,因为我正在开发一个 WinForms 应用程序,而 System.Drawing 正在应用程序的设计器中使用!我想我可以进一步重构它,但我把它的大小缩小到了 13KB,所以它已经足够好了。谢谢大家!
【问题讨论】:
-
为什么不实现自己的不依赖 System.Drawing 的
Point结构。我希望我误解了您使用int数组来跟踪分辨率... -
嗯,重点(呵呵)是除了来自“Point”类的两个整数之外,我不需要任何东西。 'struct' 是否比 'Int32[,]' 或两个
Int32's 更轻量级? -
我会忘记数组的想法。这里没有任何类型的数组的上下文。一个结构本质上是将两个
ints 组合成一个值,因此它相对等同于两个int的想法。 -
您可以使用
Tuple<int, int>来存储它,而不是数组或Point。
标签: c# winforms multidimensional-array system.drawing