访问数组中对象的成员
本文关键字:成员 对象 数组 访问 | 更新日期: 2023-09-27 18:23:38
我的问题与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()
实现。