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));
这是我尝试输出它。
答案 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()));