将特定键添加到c#词典之前的验证值

问题描述 投票:1回答:2

我正在尝试以这样一种方式来实现字典,即只有当new value大于当前存在的值时,它才会在键中添加特定值。

所以基本方案是:

  1. 如果键不可用,它将创建一个新键和一个值
  2. 如果密钥可用,它将检查当前值是否大于已分配给该密钥的值,并且仅当该值更大时才更新。
  3. 在我解释我在这里面临的问题之前是我的代码

    static IDictionary<string, string> versionStack = new Dictionary<string, string>();
    
foreach(var item in RequiredApps) 
{
    nameOfApp = item.Key;
    minimumVersionOfApp = item.Value.minVersion;

    if (versionStack.TryGetValue(nameOfApp, out minimumVersionOfApp)) 
    {
         if (Convert.ToInt32(minimumVersionOfApp) >= Convert.ToInt32(item.Value.minVersion)) 
            minimumVersionOfApp = item.Value.minVersion;
    }

    versionStack[nameOfApp] = minimumVersionOfApp;
}

注:

请不要担心for循环,因为它可以正常工作,并且在此没有问题。只想只显示给我带来问题的特定代码

现在,我已经能够在一定程度上实现功能,但是问题是,当执行TryGetValue时,会将我的所有值都设为null。

我正在使用TryGetValue来查看键是否具有值,如果有,则检索它。

我现在被困在这里,如果有人可以帮助我显示我在做什么错,我将不胜感激。

编辑:-

鉴于我所面临的问题还不清楚,并且正如Rufus L所建议的那样,我正在添加一个示例虚拟应用程序来确切地解决我所面临的问题

希望这有助于清除任何混乱:)

class Program
    {

        static IDictionary<string, string> versionStack = new Dictionary<string, string>();

        static string appName;
        static string minVersion;
        static void Main(string[] args)
        {
            AddOnce();
            AddTwice();

        }

        public static void AddOnce()
        {
            appName = "app01";
            minVersion = "1.0";

            versionStack.Add(appName, minVersion);
        }

        public static void AddTwice()
        {
            string existingValue;

            appName = "app01";
            minVersion = "3.0";

            if (!versionStack.TryGetValue("app01", out existingValue) || Convert.ToInt32(existingValue) < Convert.ToInt32(minVersion))
            {
                versionStack[appName] = minVersion;
            }
        }

    }

我正在尝试以这样一种方式来实现字典:只有当新值大于当前值时,它才会在键中添加一个特定值,因此基本情况将是:...

c# .net string dictionary generics
2个回答
0
投票

根据您显示的代码,看来问题是您正在使用minimumVersionOfApp作为out方法的TryGetValue参数,如果null将被设置为TryGetValue失败,但是无论如何我们都在使用它。

请记住,带有任何out参数的合同是方法必须


0
投票
似乎您的问题不是Dictionary.TryGetValue,而是Convert.ToInt32

版本号是双精度数字,而不是整数。您应该使用Convert.ToDouble而不是Convert.ToInt32

© www.soinside.com 2019 - 2024. All rights reserved.