【发布时间】:2019-08-30 13:47:57
【问题描述】:
以下代码给出错误:“不能在此范围内声明名为 'ac' 的本地或参数,因为该名称在封闭的本地范围中用于定义本地或参数”。
if (action is ActionRegisterNewDevice ac)
{
state = state.ShallowCopy();
// Initialise the device to off
state.DeviceOn[ac.ObjectId] = false;
}
else if (action is ActionOnMouseDown ac)
{
state = state.ShallowCopy();
// toggle the state of the device
state.DeviceOn[ac.ObjectId] = !DeviceSelectors.Device_is_on(state, ac.ObjectId);
}
我的印象(显然是错误的)第一个条件是一个单独的范围。看起来模式匹配,即使是假的,仍然声明变量ac。
但是the documentation 说:
模式匹配表达式的语言规则可帮助您避免 滥用匹配表达式的结果。在上面的例子中, 变量 s、c 和 r 仅在范围内,并且在 相应的模式匹配表达式具有真实的结果。如果你试试 要在另一个位置使用任一变量,您的代码会生成 编译器错误。
这个错误显然只能通过将第二个 ac 重命名为其他名称来解决。它是否正确?我误解了文档吗?
【问题讨论】:
-
有什么问题?
-
@GaryStewart 已澄清我想要澄清。请问我对文档有什么误解。