C# - 创建数组,其中数组值包含多个对象,每个对象也有一个值

时间:2009-12-19 13:43:10

标签: c# arrays

我刚刚在C#做过一些事情,我想知道如何做这样的事情。

Array[0] =
  Array['Value'] = 2344;
  Array['LocationX'] = 0;
  Array['LocationY'] = 0;
Array[1] =
  Array['Value'] = 2312;
  Array['LocationX'] = 2;
  Array['LocationY'] = 1;
Array[2] =
  Array['Value'] = 2334;
  Array['LocationX'] = 4;
  Array['LocationY'] = 3;

它本身并不重要的数据,就是我知道如何在PHP中执行此操作。但是在C#中我没有,而且我已经尝试了一些方法而且没有运气。

在PHP中我可以做这样的事情:

$Array[0]->Value = 2344;
$Array[0]->LocationX = 0;
$Array[0]->LocationY = 0;

这些值将被添加到数组中。

在C#中,我尝试过这种方式,并没有这样做。

有人可以告诉我如何在C#中执行此操作吗?

感谢。

5 个答案:

答案 0 :(得分:5)

编写一个类或结构来保存Value,LocationX和LocationY。

struct Foo
{
  Foo(value, x, y)
  {
    Value = value;
    LocationX = x;
    LocationY = y;
  }

  Foo() {}

  int Value;
  int LocationX;
  int LocationY;
}

Foo[] f = new [] 
{
  new Foo(1, 2, 3), 
  new Foo(2, 3, 4)
}

或以这种方式初始化数组:

Foo[] f = new [] 
{
  new Foo() { Value = 1, LocationX = 2, LocationY = 3 },
  new Foo() { Value = 4, LocationX = 5, LocationY = 6 },
}

或使用Dictionary<string, int>的数组。

Dictionary<string, int>[] array = new []
  {
    new Dictionary<string, int>() {{ "Value", 1 }, {"LocationX", 2}, {"LocationY", 3 }},
    new Dictionary<string, int>() {{ "Value", 4 }, {"LocationX", 5}, {"LocationY", 6 }}
  }

仅在需要动态时才推荐使用(意味着:您希望在数组的每个元素中使用不同的值,或者您的键是在字符串中,在编译时不知道。)除非它很难维护

答案 1 :(得分:4)

好吧,你可以有一个你编写的类的实例数组:

public class DataForArray
{
    public int Value { get; set; }
    public int LocationX { get; set; }
    public int LocationY { get; set; }
}

然后是这样的:

DataForArray[] array = new DataForArray[10];
array[0] = new DataForArray();
array[0].Value = 2344;
etc...

答案 2 :(得分:3)

在C#中,你可以试试这样的东西

// initialize array
var list = new[]
               {
                   new {Value = 2344, LocationX = 0, LocationY = 0},
                   new {Value = 2312, LocationX = 2, LocationY = 4},
                   new {Value = 2323, LocationX = 3, LocationY = 1}
               }.ToList();

// iterate over array
foreach (var node in list)
{
    var theValue = node.Value;
    var thePosition = new Point(node.LocationX, node.LocationY);
}

// iterate over array with filtering ( value > 2300 )
foreach (var node in list.Where(el => el.Value > 2300))
{
    var theValue = node.Value;
    var thePosition = new Point(node.LocationX, node.LocationY);
}

// add again
list.Add(new { Value = 2399, LocationX = 9, LocationY = 9 });

答案 3 :(得分:0)

这是一个详细说明使用多维数组的链接

http://msdn.microsoft.com/en-us/library/aa288453(VS.71).aspx

答案 4 :(得分:0)

您可以在C#中使用匿名类型:

var arr = new[] {
    new{Value = 1, LocationX = 2, LocationY = 3},
    new{Value = 1, LocationX = 2, LocationY = 3},
    new{Value = 1, LocationX = 2, LocationY = 3},
    new{Value = 1, LocationX = 2, LocationY = 3},
    new{Value = 1, LocationX = 2, LocationY = 3} };

只有一个问题是匿名类型的属性是只读的。所以你不能做那样的事情:

arr[1].Value = 2