使用定义变量的 Lambda 函数
Lambda functions using defined variables
我想根据从配置文件(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,因为由于 fact that references are sent to lambda functions,它必须小于和大于 0。两个实例中的值 fVal 都将为 0,因此它必须为 >=0
和 <=0
.
我真的很纠结如何设置才能正确测试我的条件。有什么建议吗?
您的 lambda 正在重用变量 fval
,它在 foreach
的范围之外定义。
移动这条线:
float fVal;
在 foreach
中应该可以按照您想要的方式工作。
我想根据从配置文件(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,因为由于 fact that references are sent to lambda functions,它必须小于和大于 0。两个实例中的值 fVal 都将为 0,因此它必须为 >=0
和 <=0
.
我真的很纠结如何设置才能正确测试我的条件。有什么建议吗?
您的 lambda 正在重用变量 fval
,它在 foreach
的范围之外定义。
移动这条线:
float fVal;
在 foreach
中应该可以按照您想要的方式工作。