2017-04-13 96 views
0

我正在做一個任務,我應該在數組中存儲一些字符串數據。每個新的字符串都應該存儲在一個單獨的數組中,這就是爲什麼我需要一個方法返回一個用戶給出的名稱的新數組。 我想要的是每次調用此方法時都有一個具有uniq名稱的新數組。從方法/函數C返回數組的正確語法是什麼#

在2D線我得到一個錯誤:本地或命名爲「_arrayNameFromUser」不能在此範圍內聲明,因爲這個名字是在一個封閉的局部範圍內用來定義一個本地或參數測試

所以參數我如何用用戶指定的名稱創建一個新的數組?

A local or parameter named '_arrayNameFromUser' cannot be declared in this scope because that name is used in an enclosing local scope to define a local or parameter test 
static string[] NewArary(string arrayNameFromUser) 
    {    
     string[] arrayNameFromUser = new string[2]; 

     return arrayNameFromUser; 
    } 
+3

你已經有一個名爲'變量_arrayNameFromUser'在方法體中 - 這是一個方法參數。所以你不能用完全相同的名稱聲明另一個變量。 –

+1

另請注意,在模式代碼指南中,'_'表示私有實例字段,而不是本地變量或方法參數 – Icepickle

+0

@Ippickle更改了這一點,謝謝 – Gusto

回答

4

給它一個不同的名稱參數:

static string[] NewArary(string name) 
{    
    string[] ret = new string[2]; 
    ret[0] = name; 
    return ret; 
} 

注意,C#命名約定只使用_underscorePrefixed名字領域,而不是參數或當地人,常常它僅限於也只有static字段(因爲可以使用this.訪問實例字段),請參閱下面的標識符常規大小寫的示例:

public class TypeName 
{ 
    private static readonly String _staticField = "foo"; 

    private Int32 field; 

    public Int32 Property { get { return this.field; } } 

    public const String PublicConstant = "bar"; 

    public void Method(Uri parameter) { 

     Int32 local = 123; 
    } 
} 

(雖然我使用的Int32代替intString,而不是string是一個有爭議的立場:d)

+0

這是錯誤的,因爲它只會返回一個名稱爲「ret」的數組,並且具有第一個元素名稱(包含用戶輸入的內容)。我想要的是每次調用此方法時都有一個具有uniq名稱的新數組。 – Gusto

+2

@Gusto你不能這樣做 - 編譯的代碼是靜態的並且是固定的,包括標識符。你不能像那樣對變量名進行參數化。我想你誤解了你的編程任務。 – Dai

2

你有一些混亂這裏編譯時/運行時之間。您不會在運行時創建新變量。

嫌疑人你需要的是Dictionary<string,string[]>。然後,而不是調用NewArary(原文如此),你會做,而不是:

Dictionary<string,string[]> arrays = new Dictionary<string,string[]>(); 

//NewArary("abc"); 
arrays.Add("abc", new string[]{}); 

再後來你會做得到abc陣列:

var thatArray = arrays["abc"]; 
+0

我不能使用字典,我必須只使用數組(這是一個學術作業) – Gusto

+2

@Gusto - 那麼你在某處錯誤地理解了你的任務,因爲你*無法在運行時創建新的「變量」。 –

相關問題