Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.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#_Dictionary_Ienumerable - Fatal编程技术网

C# 计算变量并将其与字典的键对进行比较

C# 计算变量并将其与字典的键对进行比较,c#,dictionary,ienumerable,C#,Dictionary,Ienumerable,我有一本字典,上面有直径(单位:mm)和欧元硬币: CoinsDiameters = new Dictionary<float, decimal> { {25.75F, 2.00m}, {24.25F, 0.50m}, {23.25F, 1.00m}, {22.25F, 0.20m},

我有一本字典,上面有直径(单位:mm)和欧元硬币:

CoinsDiameters = new Dictionary<float, decimal>
                {
                    {25.75F, 2.00m},
                    {24.25F, 0.50m},
                    {23.25F, 1.00m},
                    {22.25F, 0.20m},
                    {21.25F, 0.05m},
                    {19.75F, 0.10m},
                    {18.75F, 0.02m},
                    {16.25F, 0.01m}
                };
CoinsDiameters=新字典
{
{25.75F,2.00m},
{24.25F,0.50m},
{23.25F,1.00m},
{22.25F,0.20m},
{21.25F,0.05m},
{19.75F,0.10m},
{18.75F,0.02m},
{16.25F,0.01m}
};
例如,一枚50欧元一分的硬币直径为24.25毫米。经过一些图像处理,我得到了一张直径为24.1毫米的图像中50美分硬币的大致直径。我试图通过记住+/-0.2 mm的错误来编写下面的代码,但它总是返回字典中的第一个值(2.00欧元硬币)。逻辑有什么问题

public decimal GetValueForDiameter(float diameter)
{
    foreach(var key in CoinsDiameters.Keys)
    {
        if (diameter < key + 0.2F || diameter > key - 0.2F)
        {
            return CoinsDiameters[key];
        }
    }

    return 0;
}
public decimal GetValueForDiameter(浮子直径)
{
foreach(硬币直径中的var键。键)
{
如果(直径<键+0.2F | |直径>键-0.2F)
{
返回硬币直径[键];
}
}
返回0;
}
您应该尝试以下方法:

if (Math.Abs(diameter - key) <= 0.2F)

if(Math.Abs(diameter-key)我想你应该把
|
替换成
&&
:)

@appclay是的,在我发布并修复它之后,我注意到了这一点。应该是
Hmmm这不会返回任何东西:(@Sean87好极了!…你让我有点害怕。我想我的基本知识是对的:)你没有使用调试器,是吗?你应该使用
&&
而不是
|
。该逻辑首先检查直径是否小于25.95或大于25.55。显然,此检查始终为真,因此任何输入都将返回字典中的第一个值。已同意。这个逻辑似乎表明,只要直径不等于键值(+-0.2),键就是所追求的。因此选择了第一个,因为它总是合格的。我认为逻辑表明@Sean87犯了一个简单的错误,我们可能都在某个时候犯过。是的。真的,我的大脑在那一刻被绞死了,因为我花了太多的时间在图像处理上,这个小错误对我来说就像攀登珠穆朗玛峰一样!