2016-11-23 56 views
0

新的編碼,這可能是相當基本的,但幫助將不勝感激。添加到數組並返回數組值 - C#

我相信我有一個問題,我如何將note2添加到majorScale[]。一旦塊完成,它將返回System.String[]而不是我期望的實際數組。

public static string[] majorScaleOfNote (string tonic) 
    { 
     string[] intervals = { "M2", "M3", "P4", "P5", "M6", "M7" }; 
     string[] majorScale = new string[7]; 
     majorScale [0] = tonic; 
     foreach (string interval in intervals) { 
      string note2 = intervalUpToNote (tonic, interval); 
      majorScale[Array.IndexOf (intervals, interval) + 1] = note2; 
     } 

     return majorScale; 

    } 

我已經縮小的問題在string[] majorScale東西。當我沒有運行某些東西時,它會產生正確的結果。事情是這樣的:

Console.WriteLine (tonic); 
     string[] intervals = { "M2", "M3", "P4", "P5", "M6", "M7" }; 
     foreach (string interval in intervals) { 
      string note2 = intervalUpToNote (tonic, interval); 
      Console.WriteLine (note2); 
     } 

是否有與我加入note2majorScale方式的問題呢?還是有另一個問題?任何幫助表示讚賞!

+0

當你說「它返回'System.String []'時,你的意思是什麼?你的方法返回一個'string []'而majorScale'是'string [] '這樣很好,看起來好像一切都好,你能澄清嗎?有其他的代碼可以告訴我們嗎? –

回答

0

問題很可能不是這種方法,而是在調用方法中使用方法執行的結果。

我想,您稍後嘗試Console.WriteLine其數組的內容是這樣的:

string[] result = majorScaleOfNote("M1"); 
Console.WriteLine(result); 

你不能輸出數組這種方式。
C#將.ToString()應用於所有對象以獲取其字符串表示形式。數組沒有自己的ToString()方法,這會導致調用最基類的Object.ToString()。它只是執行以下操作:

public virtual String ToString() 
{ 
    return GetType().ToString(); 
} 

這就是爲什麼,它輸出的類型,其結果System.String[]

如果你想輸出數組的所有元素,你可以嘗試通過自己動手和輸出字符串一個接一個迭代:

string[] result = majorScaleOfNote("M1"); 
foreach (var note in result) 
    Console.WriteLine(result); 

,或者您可以使用String.Join方法,使用該連接字符串提供的分隔符:

string[] result = majorScaleOfNote("M1"); 
Console.WriteLine(string.Join(", ", result)); 
+0

這正是我所需要的。我不知道數組沒有自己的'ToString()'。 「foreach」循環和「String.Join」都給出了預期的結果。 謝謝,Yeldar! –