在foreach循环中访问List <object []>的数组元素

use*_*322 5 c# foreach object

这就是我所拥有的:

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)

有没有办法使这项工作不失去代码可读性,或者我应该尝试使用类而不是对象数组?

use*_*322 1

我决定选择 Tuple。感谢发帖者提出的想法,他后来删除了他的答案。你的英勇事迹将被铭记。

编辑:必须更改Vector4Color(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 效率,如果这被证明比其他建议的解决方案慢,我会考虑使用它们。