【问题标题】:Why does this method returns "System.String[ ]", instead of returning all the objects in the array?为什么这个方法返回“System.String[]”,而不是返回数组中的所有对象?
【发布时间】:2016-02-22 06:57:19
【问题描述】:

wordlist() 方法返回从结构中的字段复制的字符串数组。 但问题是这个方法返回System.String[ ],而不是返回数组中的所有对象。我试着做foreach,但我认为这不是问题。不幸的是,我无法弄清楚。

public struct wordStruct
{
    public string Sword;
}   

class StringCounterClass : IOrederedWordStructure
{
    wordStruct[] array = new wordStruct[10];

    int totalInsertedWords = 0;

    public string[] wordList()
    { 
        string [] wordArray = new string[array.Length];

        for (int i = 0; i < wordArray.Length; i++)
        {
            wordArray[i] = array[i].Sword;
        }

       return wordArray;
    }

    public void insertWord(string[] words)
    {
        int insertwordLength = words.Length;
        totalInsertedWords = insertwordLength;
        string[] myWord = words;

        foreach (string word in myWord)
        {
            for (int i = 0; i < insertwordLength; i++)
            {
                array[i].Sword = myWord[i];
            }
        }
    }

【问题讨论】:

  • } for wordList() 放置错误,我认为是错字
  • 这段代码甚至无法编译。 return 语句在类中的任何方法之外。
  • 不在问题中。我们无法帮助您处理您自己计算机上的代码,我们只能帮助您处理您发布的代码。而且您发布的代码是错误的。
  • 另外,如果方法返回字符串数组有问题,为什么要返回字符串数组?还是您使用过 Console.WriteLine(wordArray) 之类的东西,想知道为什么输出是 System.String[]
  • 不确定我是否明白这个问题。 System.String[]string[] 的完全限定名称,它是一个字符串数组,“数组中的所有对象”,对吧?您如何得出这不是您想要的结论?正如@LasseV.Karlsen 所说,可能是对ToString() 的一些(隐式)调用将导致"System.String[]" 被返回/显示。如果要将string[] 中的所有字符串组合成一个(例如)空格分隔的string,请尝试:string value = string.Join(" ", wordArray);

标签: c# arrays visual-studio


【解决方案1】:
  1. 检查你的错字

      } return wordArray;
    
    1. 您何时将值提取到代码中的对象 array 中。如果没有正确完成,那么您将在对象 array 中有一个大小为 10 的空数组。所以很明显你会在你的方法中返回另一个空数组。

【讨论】:

  • 感谢您的评论,我考虑过这一点,但我确实通过在方法块中编写此代码验证了 array.Sword 是否为空.. console.writeLine(array[1].Sword );它确实奏效了。但由于某种原因,退货不起作用。
  • 我刚刚添加了其余代码,请告诉我。
  • 我仍然假设您的 return 语句在您的实际代码中的方法块 {} 内。您可以尝试执行以下代码: public string[] wordList() { string [] wordArray = new string[array.Length]; for (int i = 0; i
  • 先生,我只在这里犯了这个错误,但我得到了相同的结果。
  • 是的,你不能那样做你(大概)想做的事。您需要循环(一种或另一种方式)。 -- Console.WriteLine(cs.wordList()); 将隐式调用cs.wordList().ToString()。但是cs.wordList() 是一个string[],并且没有针对方法ToString 的特殊覆盖。所以object.ToString() 将被执行,它只打印对象类型的名称。 那是你从哪里得到"System.String[]",因为那是对象的类型。
猜你喜欢
  • 2011-10-06
  • 2018-03-23
  • 1970-01-01
  • 2020-02-03
  • 1970-01-01
  • 1970-01-01
  • 2013-08-20
  • 2015-02-15
  • 2016-02-23
相关资源
最近更新 更多