Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用字典创建交叉表结构_C# - Fatal编程技术网

C# 使用字典创建交叉表结构

C# 使用字典创建交叉表结构,c#,C#,我想创建一个数据存储类来保存一些商品及其数量。例如,购物车上有一些物品及其数量 这个存储类的行为应该类似于数据库交叉表 ID | Amount ----------- 1 | 432 2 | 52345234 3 | 243545 4 | 1123 5 | 235345645 6 | 3434 7 | 33342 8 | 5543 9 | 665675 10 | 3445 我考虑过使用一本保存ID和金额的字典 class Store { public Store()

我想创建一个数据存储类来保存一些商品及其数量。例如,购物车上有一些物品及其数量

这个
存储
类的行为应该类似于数据库交叉表

ID | Amount
-----------
1  | 432
2  | 52345234
3  | 243545
4  | 1123
5  | 235345645
6  | 3434
7  | 33342
8  | 5543
9  | 665675
10 | 3445
我考虑过使用一本保存ID和金额的字典

class Store
{
    public Store()
    {
        goods = new Dictionary<int, int>();

        for (int i = 0; i < 10; i++) // There might be 10 goods in the database
        {
            goods.Add(i, 0); // initialize with an amount of 0
        }
    }

    Dictionary<int, int> goods; // <ID, Amount>

    public void ChangeGoodAmount(int goodId, int goodAmountModifier) // add or remove goods
    {
        goods.Where(valuePair => valuePair.Key == goodId).First().Value += goodAmountModifier;
    }
}
类存储
{
公共商店()
{
货物=新字典();
for(int i=0;i<10;i++)//数据库中可能有10个商品
{
goods.Add(i,0);//初始化为0
}
}
字典商品;//
public void ChangeGoodAmount(int-goodId,int-goodAmountModifier)//添加或删除商品
{
其中(valuePair=>valuePair.Key==goodId.First().Value+=goodAmountModifier;
}
}
我无法修改金额,因为
值是只读的。是否可能有一种变通方法,或者可能有一种完全不同的方法?

替换

goods.Where(valuePair => valuePair.Key == goodId).First().Value += goodAmountModifier;

您不必在此处使用LINQ来查找要更改的条目。我添加了一个检查,以确保当goodId不可用时不会出现异常

使用
goods[goodId]
可以访问值。

替换

goods.Where(valuePair => valuePair.Key == goodId).First().Value += goodAmountModifier;

您不必在此处使用LINQ来查找要更改的条目。我添加了一个检查,以确保当goodId不可用时不会出现异常


使用
goods[goodId]
您可以访问该值。

为什么不直接访问您的字典

    public void ChangeGoodAmount(int goodId, int goodAmountModifier) // add or remove goods
    {
        if(goods.ContainsKey(goodId))
            goods[goodId] += goodAmountModifier;
    }

为什么你不直接访问你的字典

    public void ChangeGoodAmount(int goodId, int goodAmountModifier) // add or remove goods
    {
        if(goods.ContainsKey(goodId))
            goods[goodId] += goodAmountModifier;
    }
使用字典上的进行写访问并获取任何现有值。如果访问以读取现有值,但该值尚不存在,则将抛出
KeyNotFoundException
。如果在字典中找不到
goodId
,下面的代码将在字典中使用
goodAmountModifier
中的值创建一个新条目,否则它将通过添加
goodAmountModifier
来修改该值

public void ChangeGoodAmount(int goodId, int goodAmountModifier) // add or remove goods
{
    int existingValue = 0;
    goods.TryGetValue(goodId, out existingValue); // attempts to retrieve the existing value
    goods[goodId] = existingValue + goodAmountModifier; // assign a value
}
使用字典上的进行写访问并获取任何现有值。如果访问以读取现有值,但该值尚不存在,则将抛出
KeyNotFoundException
。如果在字典中找不到
goodId
,下面的代码将在字典中使用
goodAmountModifier
中的值创建一个新条目,否则它将通过添加
goodAmountModifier
来修改该值

public void ChangeGoodAmount(int goodId, int goodAmountModifier) // add or remove goods
{
    int existingValue = 0;
    goods.TryGetValue(goodId, out existingValue); // attempts to retrieve the existing value
    goods[goodId] = existingValue + goodAmountModifier; // assign a value
}

如果字典不包含该键,则将引发异常,而现在您的答案与我在您之前几分钟所做的相同:D如果字典不包含该键,则将引发异常,而现在您的答案与我在您之前几分钟所做的相同:D