访问数组中对象的成员

时间:2014-09-20 20:54:27

标签: c# arrays

我的问题与c#中的数组有关,或者我认为是数组。我对c#的基础知识非常了解,但之后并不多。

我的任务是更改下面的一段代码。代码从Web服务中检索记录列表,并将它们存储在我可能错误地认为是数组的内容中。我不确定数组是否可以有如下所示的键或“列”(PurchaseDate,Location等..)。如果不是数组是什么?

OO_WebService.Sale[] saleList= OO_webService_connection.GetSales().Sales;

Console.Writeline(saleList[0].PurchaseDate);
Console.Writeline(saleList[0].Location);

Console.Writeline(saleList[1].PurchaseDate);
Console.Writeline(saleList[1].Location);

我还需要打印出所有键或列名。例如,还有另外20个密钥以及PurchaseDate和Location。我希望能够使用for循环打印出所有键名(PurchaseDate)及其值(01/04/2014等..)。我知道在javascript中有可能。我已经尝试了几次但没有运气实现它。任何建议都非常感谢。

3 个答案:

答案 0 :(得分:2)

你需要使用反射......

var props = saleList.GetType().GetElementType().GetProperties();

foreach (var sale in saleList)
{
    foreach (var p in props)
    {
        Console.WriteLine(p.Name + "=" + p.GetValue(sale,null));
    }
    Console.WriteLine();
}

答案 1 :(得分:1)

本例中的数组包含Sale个元素。 C#中的数组只是一个固定大小的元素集合,可以包含原始类型(例如您可能熟悉的int[])或者您正在处理的对象。< / p>

您可以将该代码重写为:

,而不是引用saleList[0].PurchaseDate
for (int i = 0; i < saleList.Lenght; i++)
{
    OO_WebService.Sale sale = saleList[i];
    Console.WriteLine(sale.PurchaseDate);
    Console.WriteLine(sale.Location);
}

因此,saleList [ index ]访问的每个元素都是Sale类的实例。我希望能为你解决问题。

答案 2 :(得分:0)

您可以右键点击Sale,然后在菜单中选择“转到定义”。那会给你所有的属性。 如果Sale是动态的(例如,以后可能会有更多或更少的属性),则可以使用反射(如Tim所说)。这可以按如下方式完成:

Type type = typeof(Sale);
PropertyInfo[] info = type.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly);
foreach (var i in info)
{
    Debug.WriteLine(i.Name + " = " + i.GetValue(this, null));
}

请注意,GetValue的返回值为object,可能需要将其转换为正确的类型。 Debug.WriteLine将调用对象默认的ToString()实现。