c# - 如何将字典中的所有负值设置为零?

标签 c# dictionary

我正在开发一个小的 C# 浏览器游戏,我使用这个字典来跟踪游戏中的多个资源:

public Dictionary <String, int> resource = new Dictionary<string,int>();

其中包括“黄金”,它会随着每次价格变动而变化。

protected void timerMinute_Tick(object sender, EventArgs e)
{
resource["gold"] += (resProduction["gold"] - resConsumption["gold"])
}

现在,如果消费大于生产,数量就会减少。我想拒绝资源变为负数。我知道我可以为每个刻度执行此操作:

if (resource["gold"] < 0)
{
resource["gold"] = 0;
}

但是,我还有很多资源需要跟踪,所以虽然我可以为每个资源编写上述代码,但我只是想知道是否有人有聪明的方法来检查字典中的所有值资源,并将任何负数变为零。

编辑:感谢您对此处问题提出的所有重要建议!作为c#的新手,我对它不是很熟悉^^

最佳答案

您可以创建自己的字典类来确保值是非负的。这是一个简单的示例,但您可以很容易地使其通用且可扩展。

public class ValidatedDictionary : IDictionary<string, int>
{
    private Dictionary<string, int> _dict = new Dictionary<string, int>();
    protected virtual int Validate(int value)
    {
        return Math.Max(0, value);
    }
    public void Add(string key, int value)
    {
        _dict.Add(key, Validate(value));
    }

    public bool ContainsKey(string key)
    {
        return _dict.ContainsKey(key);
    }
    // and so on: anywhere that you take in a value, pass it through Validate

关于c# - 如何将字典中的所有负值设置为零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19597997/

相关文章:

c# - 将 C# 委托(delegate)转换为单元测试

javascript - 从服务器端实时 float 到 JavaScript

c++ - map 键没有可行的重载 '=' 错误

javascript - 创建包含具有所有值的相同字母的所有键的映射

c# - 事后发现非法/损坏的容器对象状态抛出哪个异常?

c# - ListView删除刷新不起作用?

c# - 如何在不刷新整个页面的情况下获得刷新的表格?

dictionary - 在 Julia 中将 Dict 转换为 DataFrame

python - 将 JSON 从文件加载到 Python 字典的正确方法

python - 在 Python 中使词形还原器的多重搜索和替换更加精确