如何比较Dictionary键值和Tuple键值

时间:2012-02-27 07:50:09

标签: c# asp.net if-statement

我有一个元组<Tuple<int, int>> x的列表,因为我得到键和值为(45345,1),(54645,0),(45345,0) 我有一个Dictionary < int, string > PathList因为我得到了关键和价值(45345,asdfsd234egsgdfgs56345),(54645,0dfsd234egsgdfgs563456),(45345,0dfsd234egsgdfgs56345234)

我正在尝试

    foreach (var item in PathList)
    {
       if (x.Equals(item.Key) && x[item.Key].Equals(0))
       {
         string path1 = Path.Combine(GetDirectory(item.Value), item.Value);
         File.Delete(path1);
       } 
    }

我想检查id的X是否与id的PathList相同,而x的值必须为0,然后在条件内输入...我现在正在做什么,在任何条件下我都无法进入如果声明。

如何检查我的情况?

让我解释一下:check this qus这是我正在返回一个元组列表,我在ascx页面中得到(54356,0),(64643,0),(34365,1)拥有元组<Tuple<int, int>> x的列表,在这个xi中获取列表的所有返回值,现在在同一个ascx页面中我有Dictionary < int, string > PathList,因为我正在添加值ImgPathList.Add(54356,456dfhgdfg6575dfghdf) ;所以我得到了两个不同的列表,一个是x,另一个是Pathlist。

现在我想检查一下。如果pathlist有id和54356并且x有54356和0则输入if语句,否则显示lable msg作为文件无法删除

5 个答案:

答案 0 :(得分:2)

我正在试图理解这个问题,但听起来我们有,比如说:

var x = Tuple.Create(45345,0);

在这种情况下,您只需要:

string value;
if(PathList.TryGetValue(x.Item1, out value)) {
    // there is an item in the dictionary with key 45345;
    // the value is now in "value"
}

还有一些关于零检查的事情;不确定你的意思,但也许只需检查x.Item2

如果x实际上是一个列表,请循环执行:

foreach(var item in list) {
    string value;
    if(PathList.TryGetValue(item.Item1, out value)) {
        // there is an element in the dictionary with key matching item;
        // the value is now in "value"
    }
}

可以这也是零检查的来源:

foreach(var item in list) {
    string value;
    if(item.Item2 == 0 && PathList.TryGetValue(item.Item1, out value)) {
        // there is an element in the dictionary with key matching item;
        // the value is now in "value"
    }
}

但是,我不能充分理解你给出的例子,所以我不能肯定地说。

答案 1 :(得分:0)

将断点放在条件上,循环直到你得到一个应该输入if语句的值,然后使用&#34; Watch&#34;看看表达式的哪个部分返回false。调试窗口。

答案 2 :(得分:0)

也许这有用: 在我的项目中,我有一本字典:

    public Dictionary<int, double> CpuDictionary = new Dictionary<int, double>();

在某些时候,我尝试使用以下方法找到密钥:

            int roundedcpupercentage = Convert.ToInt16(Math.Round(cpuusagepercentage));
            if (CpuDictionary.ContainsKey(roundedcpupercentage))
            {
                temp.CPU = CpuDictionary[roundedcpupercentage];
                temp.Watt = temp.CPU;
            }

containskey功能对我来说非常合适。也许你应该尝试类似的东西。

答案 3 :(得分:0)

如果你想检查字典的密钥为Item1Item2==0是否有元组,那就是这样的:

foreach(var item in pathList) { 
    var xItem = x.Find(i => i.Item1 == item.Key && i.Item2 == 0);
    if(xItem =! null) { 
        // YourTuple.Item1==item.Key && YourTuple.Item2==0 => true
    }
}

注意:在上面的示例中,您有两个相同的字典键。

答案 4 :(得分:0)

我已将代码修改为

 foreach (var item in PathList)
 {
    Tuple<int, int> temp = new Tuple<int, int>(item.Key, 0);
       //if (x.Equals(item.Key) && x[item.Key].Equals(0))
    if (x.Contains<Tuple<int, int>>(temp))
      {
         string path1 = Path.Combine(GetDirectory(item.Value), item.Value);
         File.Delete(path1);
       }
   }

我不知道这是一个好方法,但它解决了我的问题......