2016-11-23 41 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! –