【问题标题】:Lambda functions using defined variables使用已定义变量的 Lambda 函数
【发布时间】:2018-03-20 01:38:15
【问题描述】:

我想根据从配置文件(XML 文件,仅供参考)中提取的值来测试条件。我有这样的事情要做检查:

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;

....

如果我将条件设置为检查这两个条件,则只有最后一个值会保留。浏览器

<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,所以它必须是 &gt;=0&lt;=0

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

【问题讨论】:

  • “测试值是否为0”是什么意思?
  • 好吧,我很困惑。您说您要测试该值是否在 0 和 0.3 之间,并且还要测试它是否 >= 0 和
  • 我想测试它是否在0到0.3之间。我实际上正在做的是测试它是否在 0 和 0 之间,因为 lambda 函数/引用的东西。无论如何,我认为这个谜团已经解决了!

标签: c# lambda conditional


【解决方案1】:

您的 lambda 正在重用变量 fval,该变量在 foreach 范围之外定义。

移动这条线:

float fVal;

foreach 中应该可以让它按照你想要的方式工作。

【讨论】:

  • 我知道它必须是非常简单的事情......这似乎已经成功了,感谢您为我解决这个问题节省了一个小时的痛苦!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多