访问列表< object []的数组元素>在foreach循环中 [英] Accessing array elements of a List<object[]> in foreach loop

查看:120
本文介绍了访问列表< object []的数组元素>在foreach循环中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



  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项)
{
int x =(Vector2)item [0] .X; //错误:'object'不包含定义
//对于'X'和没有扩展方法'X'接受
//类型'object'的第一个参数可能是
// found(你是否缺少using指令或
//一个程序集引用?)
//其他的东西
}

有没有办法使这个工作,而不会丢失代码的可读性,或者我应该尝试使用类而不是对象数组? =h2_lin>解决方案

我决定和Tuple一起去。感谢那个后来删除了他的答案的海报。勇敢的事迹将被记住。
$ b $编辑:不得不改变 Vector4 颜色










$ //声明
List< Tuple< Vector2,Color>> marker = new List< Tuple< Vector2,Color>>();

//添加项目
Tuple< Vector2,Color> (
new Vector2(x,y),Color.FromNonPremultiplied(250,200,150,100));标记=新的元组Vector(Vector2,Color)
markers.Add(marker);

//检索项值
foreach(标记中的var项)
{
int x = item.Item1.X;
int y = item.Item1.Y;
颜色mycolor = item.Item2;





它可以工作,但是我还没有测试过CPU的效率,证明比其他解决方案慢,我会考虑使用它们。


This is what I have:

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
}

Is there a way to make this work without losing code readability, or should I try using a class instead of object array?

解决方案

I decided to go with Tuple. Thanks for the idea to the poster who later removed his answer. Your deeds of valor will be remembered.

Edit: had to change Vector4 to Color (alpha channel was always 255).

Result:

// 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;
}

It works, but I still haven't tested for CPU efficiency, if this proves to be slower than other proposed solutions, I will consider using them instead.

这篇关于访问列表&lt; object []的数组元素&gt;在foreach循环中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆