如何返回列表<字符>的内容

本文关键字:字符 列表 何返回 返回 | 更新日期: 2023-09-27 17:56:06

 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;
    }

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

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

那是我试图输出它。

如何返回列表<字符>的内容

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

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

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

那么这种过载有什么作用呢?如果您阅读说明,您将很容易弄清楚。

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

好的,所以当你传递字符列表时,它会调用一个 ToString() 方法。让我们来看看 List<T> 上的 ToString() 方法。当您单击"ToString"链接时,您将看到您最终进入System.Object.ToString()页面。这意味着 List 类型不会重写基方法。那么Object.ToString()是做什么的呢?

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

谜团解开了!

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

有了这些知识,您就可以弄清楚该怎么做才能打印字符本身。例如,可以通过编写字符数组来传递字符数组以调用Console.WriteLine(Char[])重载Console.WriteLine(ex.Columns(line).ToArray());

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

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

s[i]

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

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

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

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

试试这个:

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