c#使用Hashtable 键值存放类foreach进行遍历

今天使用hashtable的时候出现了一些问题,网上没找到合适的答案所以解决后分享一篇

比如我创建一个商品类,再创建商店里面存放商品的数据,然后通过foreach遍历商品的属性

public class Shangping
{
    public int number { get; set; }
    public string name { get; set; }
    public int price { get; set; }

    public Shangping(int number, string name, int price)
    {
        this.number = number;
        this.name = name;
        this.price = price;
    }
}

现在创建一个商店类用hashtable存放来添加我需要的商品

   public class Shangdian
   {
       public Hashtable product = new Hashtable();
       public void Add(int number, string name, int price)
       {
           product.Add(number, new Shangping(number,name,price));
       }
   }

在主函数里面添加商品

 Shangdian shangdian = new Shangdian();
 shangdian.Add(1,"牛奶",10);
 shangdian.Add(2, "薯片", 20);

此时当你想要遍历这个hashtable的时候就出现问题了

如果你的hashtable是一个键对应一个值的话就能正常输出

比如你的hashtable是这样创建的:product.Add(10,"汉堡");

你使用foreach遍历他的时候可以直接遍历它

   foreach (var item in product)
   {

       Console.WriteLine($"商品为:{item}");
   }

但是如果你用这个遍历一开始我们创建的hashtable的时候就会出现

可以看到由于我们的键值为一个类不能像这样遍历

我们需要进行类型转化,比如我们的键值为一个类,那我们就需要先转为这个类,再进行属性的访问

foreach (DictionaryEntry entry in product)
{
    
    Console.WriteLine($"键: {((int)(entry.Key))}, 对应值: 名字为{((Shangping)entry.Value).name},价格为{((Shangping)(entry.Value)).price}");
}       

分开写就是

foreach (DictionaryEntry entry in product)
{
    int keys = (int)entry.Key;
    Shangping A = (Shangping)entry.Value;
    Console.WriteLine($"键: {keys}, 对应值: 名字为{A.name}");
}

可以看到,当foreach要遍历一个类的属性时候,我们需要进行类型的转换因为

  • foreach遍历Hashtable时返回的是DictionaryEntry对象,不是直接的键

  • product.Values返回的是所有值的集合,不是单个值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值