我试图找出你是否可以访问添加到列表(对象)的对象,如下所示:
public class nearshop_data
{
public String r_name { get; set; }
public String r_desc { get; set; }
public String loc_lat { get; set; }
public String loc_lon { get; set; }
}
然后按照
添加到该列表shop_data = new nearshop_data();
lo = new List<object>();
for (int i = 0; i < count; i++) {
shop_data.r_name = stuff.results[i].name;
shop_data.r_desc = stuff.results[i].vicinity;
shop_data.loc_lat = stuff.results[i].geometry.location.lat;
shop_data.loc_lon = stuff.results[i].geometry.location.lng;
lo.Add(shop_data);
}
然后我想在另一个类中检索,在后面的代码中说,这里它都失败了...因为我实际上无法访问该对象的属性
关于如何重写代码或使用什么的任何想法?
我猜测当我在我的代码后面获取该列表的实例时,让我们说它在索引0处检索它仍然装箱(或者我错了吗?) - 我依稀记得这样的事情是在java中完成的< / p>
答案 0 :(得分:4)
我认为问题在于您使用的是List<object>
而不是List<nearshop_data>
,这实际上是装箱的类型。
如果你需要保持这样,你需要将对象强制转换为适当的类型:
nearshop_data firstElement = (nearshop_data)lo[0];
或者最好首先使用List<nearshop_data>
。
此外,因为nearshop_data
是reference type,并且您只实例化一次,所以每次只将指针添加到同一个shop_data
实例。这意味着你只会得到一个元素,其值等于最后一个循环迭代的值。
答案 1 :(得分:1)
您需要将列表中的项目转换回特定的类:
nearshop_data myitem = lo[0];
当然,您可能需要在尝试演员之前检查打开的类型(否则会抛出异常)。你可以这样做:
if (lo[0] is nearshop_data)
{
// do your cast here
}
或:
nearshop_data myitem = lo[0] as nearshop_data;
if (myitem != null)
{
// myitem is a nearshop_data instance
}
当然,更好的方法是在通用列表中使用更具体的类。 List<object>
实际上并不比旧ArrayList
更有用。如果您只需要nearshop_data
项,那么只需使用List<nearshop_data>
即可。如果您需要一个异构列表,那么只需使用最具体的基类(或接口)来覆盖您需要存储的所有项目。