如何返回列表<字符>的内容
本文关键字:字符 列表 何返回 返回 | 更新日期: 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()));