如何返回List <char> </char>的内容

时间:2013-01-27 04:13:14

标签: c#

 public List<char> Columns(String input)
    {
        char[] temp = input.ToCharArray();
        List<char> columns = new List<char>(input.Length);
        for (int i = 0; i < input.Length; i++)
        {
            if (other.Contains(temp[i]))
            {
                columns.Add((char)(i+1));
            }
        }
        return columns;
    }

我的目标是让这个方法返回一个List。但是,当我用另一种方法输出内容时,我得到了'System.Collections.Generic.List [char]

Console.WriteLine(ex.Columns(line));

这是我尝试输出它。

4 个答案:

答案 0 :(得分:4)

首先,让我们回答你为什么得到System.Collections.Generic.List[char]的问题。

用于向控制台输出内容的方法是Console.WriteLine。如果您转到链接页面,您将看到该方法的许多重载,所有重载都采用不同类型的参数。当你传递List<char>类型的参数时,让我们考虑使用哪一个。

如果仔细查看该列表,您会发现没有超载需要List<anything>。如您所知,在.NET中,每种类型都来自System.Object,换句话说,每种类型都是 System.Object。当C#编译器尝试选择方法重载并且无法解析确切类型时,它将恢复为查找是一种关系。在我们的例子中,唯一匹配is the one that takes System.Object的重载。

那么这个重载怎么办?如果您阅读说明,您将很容易理解。

  

如果value为null,则只写入行终止符。否则,调用ToString方法的值以生成其字符串表示形式,并将结果字符串写入标准输出流。

好的,所以当你传递你的字符列表时,它会调用一个ToString()方法。我们来看看ToString() method on the List<T>。当您点击“ToString”链接时,您会看到最终到达System.Object.ToString()页面。这意味着List类型不会覆盖基本方法。那么Object.ToString()做了什么?

  

ToString方法的默认实现返回Object类型的完全限定名称,如以下示例所示。

神秘解决了!

编写Console.WriteLine(ex.Columns(line));时,编译器调用Console.WriteLine(Object)重载,该重载在传递的参数上调用Object.ToString(),该参数将打印该类型的完全限定名称。

有了这些知识,你就可以弄清楚要做什么来打印角色本身。例如,您可以通过编写Console.WriteLine(ex.Columns(line).ToArray());

来传递一个字符数组来调用Console.WriteLine(Char[])重载

答案 1 :(得分:0)

不确定你要在这里完成什么。始终可以索引字符串以获取特定字符。

那么为什么要引入一个List,为什么要有一个时髦的方法。只是做:

s[i]

答案 2 :(得分:0)

没有数组不会帮助你。要输出集合的内容,您需要遍历收集的每个元素。

使用list.ToString()调用ToString()上的List<T>调用标准对象ToString实现,即打印出类型的名称,这就是您所看到的。

您必须迭代它并访问每个元素:

foreach(var item in list) {
    string s = item.ToString();
}

答案 3 :(得分:0)

试试这个:

Console.WriteLine(new string(ex.Columns(line).ToArray()));