繁体   English   中英

访问数组中对象的成员

[英]Accessing members of an object in array

我的问题与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。 我已经尝试了几次,但是没有运气实现它。 任何建议,不胜感激。

您需要使用反射...

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();
}

在这种情况下,数组包含Sale元素。 C#中的数组只是元素的固定大小集合,并且可以包含原始类型(例如您可能熟悉的int[] )或正在处理的对象。

不用引用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类的一个实例。 我希望这可以为您解决一切。

您可以右键单击“ 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()实现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM