2012-06-11 24 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

相關問題