C# 如何访问对象';s存储在对象列表c中的属性#

C# 如何访问对象';s存储在对象列表c中的属性#,c#,C#,我正在尝试确定您是否可以访问添加到(对象)列表中的对象,如下所示: 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_d

我正在尝试确定您是否可以访问添加到(对象)列表中的对象,如下所示:

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

} 
shop_data=新的nearshop_数据();
lo=新列表();
for(int i=0;i
然后我想在另一个类中检索它,比如在代码隐藏中,这里是它失败的地方。。。因为我实际上无法访问该对象的属性

关于如何重写代码或使用什么有什么想法吗


我猜当我在代码中得到这个列表的实例时,比如说在索引0处检索它,它仍然被装箱(或者我错了吗?)-我模糊地记得类似的事情是在java中完成的,我想问题是你使用的是
list
,而不是
list
,这实际上是装箱类型

如果需要保持这种状态,则需要将对象强制转换为适当的类型:

nearshop_data firstElement=(nearshop_data)lo[0]

或者最好首先使用
列表


此外,由于
nearshop_data
是一个实例,并且只实例化一次,因此每次只添加指向
shop_data
的同一实例的指针。这意味着您只会得到一个元素,其值等于上一次循环迭代的值。

我认为问题在于您使用的是
List
,而不是
List
,后者实际上是装箱类型

如果需要保持这种状态,则需要将对象强制转换为适当的类型:

nearshop_data firstElement=(nearshop_data)lo[0]

或者最好首先使用
列表


此外,由于
nearshop_data
是一个实例,并且只实例化一次,因此每次只添加指向
shop_data
的同一实例的指针。这意味着您将只得到一个元素,其值等于上一次循环迭代的值。

您需要将列表中的项强制转换回它的特定类:

 nearshop_data myitem = lo[0];
当然,您可能希望在尝试和强制转换之前检查打开的类型(否则它将引发异常)。您可以这样做:

if (lo[0] is nearshop_data) 
{
    // do your cast here
}
或:


当然,最好在泛型列表中使用更具体的类<代码>列表
实际上并不比旧的
数组列表
更有用。如果您只需要
nearshop\u数据
项,则只需使用
列表
。如果您需要一个异构列表,那么只需使用最特定的基类(或接口),该基类将涵盖您需要存储的所有项。

您需要将列表中的项转换回其特定的类:

 nearshop_data myitem = lo[0];
当然,您可能希望在尝试和强制转换之前检查打开的类型(否则它将引发异常)。您可以这样做:

if (lo[0] is nearshop_data) 
{
    // do your cast here
}
或:


当然,最好在泛型列表中使用更具体的类<代码>列表
实际上并不比旧的
数组列表
更有用。如果您只需要
nearshop\u数据
项,则只需使用
列表
。如果您需要一个异构列表,那么只需使用最具体的基类(或接口),它将涵盖您需要存储的所有项目。

为什么您有一个
列表
,而您可以有一个
列表
?我认为变量命名可以改进,因为我已经将其更改为list,谢谢你指出为什么你有一个
列表
,而你可以有一个
列表
?而且我认为变量命名可以改进。我已经把它改成了列表,谢谢你指出了这一点。第二个问题是,他实际上只在列表中添加了一个对象。@Dirk-因为shop\u数据是一个引用类型?是的,这是一个类,他只创建了它的一个实例。@m.edmondson,Dirk的意思是,
new
可能需要在循环内部,而不是外部,否则他将得到一个包含1个店铺数据实例的列表,这将写入最后一个的值。正确-为了完整性,我将把它添加到我的答案中。第二个问题是他实际上只在列表中添加了一个对象。@Dirk-因为shop_数据是引用类型?是的,它是一个类,他只创建了它的一个实例。@m.edmondson,Dirk的意思是,
新的
可能需要在循环内部,而不是外部,否则他将得到一个包含1个店铺数据实例的列表,其中将写入最后一个实例的值。正确-为了完整性,我将把这个添加到我的答案中。