2012-06-11 25 views
1

在这里我有一部分code.in在这里我得到了错误。给另一个范围的不同含义

ERROR >>命名为“味精”的局部变量不能在此范围内声明,因为它会给予不同的意义“味精”,这已经是一个“父母或电流”范围用来表示别的东西

但我用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); 
     } 

回答

4

你有一个参数调用msg - 局部变量不能有相同的名称。你也有同名的班级变量 - 只要你用this.msg访问它,你可以保留这个变量。

我怀疑你不想申报你的最后一行一个新的变量:

String msg = iso.GetString(isoBytes); 

的3个变量叫msg如下所示:

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 
    } 
+0

局部变量是什么意思? – TechGuy

+0

请详细说明 – TechGuy

+1

@ChathuraRanasinghe:该函数有一个名为'msg'的参数。在函数的主体内部声明一个名为'msg'的变量。编译器不接受这种模糊性。 –

1

Local variable declarations(第8.5.1节的C#规范)

从第8.5.1节开始:

本地变量声明中声明的局部变量的范围是发生声明的块。在本地变量的局部变量声明符之前的文本位置引用局部变量是错误的。在一个局部变量的范围内,这是一个编译时错误声明另一个局部变量或常量具有相同名称的


你有方法声明SMAE名称声明变量..

现在方法,你再次做

String msg = iso.GetString(isoBytes); 

导致了问题声明参数。

这也给

private string msg; 

    public void test(String msg) 
    { 
     msg = null; 
     string msg = "abc"; 
    } 

这里同样varible声明SMAE错误三次,但实际工作中的问题是这是在同一范围内的同一变量的第三个声明,你可以在规格说明的链接

看到原因

第二个声明只是隐藏具有相同名称的类级变量。它不会导致任何错误。

+1

这不是一个错误。错误是由第三个声明引起的。 – Rawling

+1

@Rawling -yes仅仅是包含了其余的答案,但现在已经更新.. –

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

NB类变量和方法参数不会相互冲突。您可以在建议的修复中删除下划线,然后您必须在方法中使用'this.msg'。 – Rawling

+0

当我把this.msg我得到错误 – TechGuy

+0

当我使用下划线.. _msg然后有没有error.but我想知道的是一个很好的方法或有任何问题? – TechGuy

相关问题