Lambda函数使用已定义的变量

时间:2017-10-08 21:43:45

标签: c# lambda conditional

我想基于从配置文件(XML文件,FYI)中提取的值来测试条件。我有这样的事情来做检查:

List<Condition> conditions = new List<Condition>();
float fVal;
foreach (XmlAttribute attr in conNode.Attributes)
{
    switch (attr.Name.ToLower())
    {
        case "alt_max":
            fVal = float.Parse(attr.Value);
            conditions.Add((t) => { return t.altitude <= fVal; });
            break;
        case "alt_min":
            fVal = float.Parse(attr.Value);
            conditions.Add((t) => { return t.altitude >= fVal; });
            break;

....

如果我设置了条件以便检查这两个条件,那么只有最后一个值可以存活。 IE

<condition alt_max="0.3" alt_min="0"/>

我想要做的是查看值(本例中为t.altitude)是否介于0和0.3之间。我实际在做的是测试值是否相同为0,因为它必须小于和大于0,因为fact that references are sent to lambda functions。两个实例中的值fVal都为0,因此必须为>=0<=0

我真的很挣扎如何设置它,以便我可以正确地测试我的条件。有什么建议吗?

1 个答案:

答案 0 :(得分:2)

你的lambda正在重用变量fval,它是在foreach范围之外定义的。

移动这一行:

float fVal;
foreach内的

应该让它按照你想要的方式工作。