这里我有一部分代码。在这里我得到了错误。
ERROR>>名为' msg'的局部变量不能在此范围内声明,因为它会给“父母”或“当前”中使用的“msg'”赋予不同的含义。范围来表示别的东西
但我使用了SMSHelper类中的所有内容。那么另一个范围是什么
public class SMSHelper
{
private string msg;
private string convertToISOfromUtf8(String msg, String to, String from)
{
String iso_msg = null;
if (from.Equals("UTF-8"))
{
System.Text.Encoding iso = Encoding.GetEncoding("ISO-8859-1");
System.Text.Encoding utf8 = Encoding.UTF8;
byte[] utfBytes = utf8.GetBytes(msg);
byte[] isoBytes = Encoding.Convert(utf8, iso, utfBytes);
String msg = iso.GetString(isoBytes);
}
答案 0 :(得分:5)
下面标有<-- this
的三行代表一个单独变量的声明,每个变量都具有相同的名称msg
。因此他们互相冲突。
private string msg; // <-- this
private string convertToISOfromUtf8(String msg // <-- this
{
// ...
if (from.Equals("UTF-8"))
{
// ...
String msg // <-- and this
}
}
以下方法可行:
private string _msg;
private string convertToISOfromUtf8(String msg, // ...
{
// ...
if (from.Equals("UTF-8"))
{
// ...
_msg = iso.GetString(isoBytes);
}
}
答案 1 :(得分:4)
您有一个名为msg
的参数 - 您的本地变量不能具有相同的名称。您还拥有具有相同名称的班级变量 - 只要您使用this.msg
访问它,就可以保留此项。
我怀疑你不想在最后一行声明一个新变量:
String msg = iso.GetString(isoBytes);
此处显示了名为msg
的3个变量:
public class SMSHelper
{
private string msg; // <-- #1
private string convertToISOfromUtf8(String msg /* <-- #2 */, String to, String from)
{
String iso_msg = null;
if (from.Equals("UTF-8"))
{
System.Text.Encoding iso = Encoding.GetEncoding("ISO-8859-1");
System.Text.Encoding utf8 = Encoding.UTF8;
byte[] utfBytes = utf8.GetBytes(msg);
byte[] isoBytes = Encoding.Convert(utf8, iso, utfBytes);
String msg = iso.GetString(isoBytes); // <-- #3
}
答案 2 :(得分:1)
Local variable declarations(C#规范第8.5.1节)
从第8.5.1节开始:
在 local-variable-declaration 中声明的局部变量的范围是声明发生的块。在局部变量的local-variable-declarator之前的文本位置引用局部变量是错误的。在局部变量的范围内,声明另一个具有相同名称的局部变量或常量是编译时错误
您已在方法声明中声明了带有smae名称的变量。
现在在方法中,您通过执行
再次声明参数String msg = iso.GetString(isoBytes);
导致问题。
这也给出了错误
private string msg;
public void test(String msg)
{
msg = null;
string msg = "abc";
}
这里相同的变量被声明三次,但是实际问题是由同一变量的第三个声明导致的,这个变量与你在sepcification链接中看到的范围相同
第二个声明只是隐藏具有相同名称的类级别变量。它没有引起任何错误..