我有点困惑。为什么从一边我变成CS0103
(变量不存在)和另一边CS0136
(用自己的话 - 变量已经存在)和交换机中具有相同名称的变量声明?
有效:
var obj = new object();
switch (obj)
{
case string str:
break;
case object str:
break;
}
这里我成为编译错误 CS0103 “当前上下文中不存在名称”:
var obj = new object();
switch (obj)
{
case string str:
break;
}
if (str == null) { } //CS0103
这里我成为编译错误 CS0136 :
var obj = new object();
switch (obj)
{
case string str: //<--- CS0136
break;
}
string str = "";
CS0103: The name 'identifier' does not exist in the current context
答案 0 :(得分:5)
这里有三条规则:
object str
和string str
模式的方式 - 但是你不需要它来证明这些特定的错误。您不需要模式匹配来证明这一点。这是一个给出CS0103错误的简单方法:
void Method()
{
{
// Scope of str is the nested block.
string str = "";
}
// str isn't in scope here, so you can't refer to it;
// second bullet point
if (str == "") {}
}
以下是CS0136的一个例子:
void Method()
{
{
// Can't declare this variable, because the str variable
// declared later is already in scope
string str = "";
}
// Scope of this variable is the whole method
string str = "";
}