这就是我所拥有的:
List<object[]> markers = new List<object[]>();
object[] marker = new object[2];
marker[0] = new Vector2(1, 2);
marker[1] = new Vector4(1, 2, 3, 4);
markers.Add(marker);
foreach (var item in markers)
{
int x = (Vector2)item[0].X; // Error: 'object' does not contain a definition
// for 'X' and no extension method 'X' accepting
// a first argument of type 'object' could be
// found (are you missing a using directive or
// an assembly reference?)
// other stuff
}
Run Code Online (Sandbox Code Playgroud)
有没有办法使这项工作不失去代码可读性,或者我应该尝试使用类而不是对象数组?
我决定选择 Tuple。感谢发帖者提出的想法,他后来删除了他的答案。你的英勇事迹将被铭记。
编辑:必须更改Vector4为Color(Alpha 通道始终为 255)。
结果:
// declaration
List<Tuple<Vector2, Color>> markers = new List<Tuple<Vector2, Color>>();
// adding items
Tuple<Vector2, Color> marker = new Tuple<Vector2, Color>(
new Vector2(x, y), Color.FromNonPremultiplied(250, 200, 150, 100));
markers.Add(marker);
// retrieving item values
foreach (var item in markers)
{
int x = item.Item1.X;
int y = item.Item1.Y;
Color mycolor = item.Item2;
}
Run Code Online (Sandbox Code Playgroud)
它有效,但我还没有测试 CPU 效率,如果这被证明比其他建议的解决方案慢,我会考虑使用它们。