我正在尝试以这样一种方式来实现字典,即只有当new value大于当前存在的值时,它才会在键中添加特定值。
所以基本方案是:
在我解释我在这里面临的问题之前是我的代码
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; } } }
我正在尝试以这样一种方式来实现字典:只有当新值大于当前值时,它才会在键中添加一个特定值,因此基本情况将是:...
根据您显示的代码,看来问题是您正在使用minimumVersionOfApp
作为out
方法的TryGetValue
参数,如果null
将被设置为TryGetValue
失败,但是无论如何我们都在使用它。
请记住,带有任何out
参数的合同是方法必须
Dictionary.TryGetValue
,而是Convert.ToInt32
版本号是双精度数字,而不是整数。您应该使用Convert.ToDouble
而不是Convert.ToInt32