0
 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

4 に答える 4

4

まず、なぜ が得られるのかという質問に答えましょうSystem.Collections.Generic.List[char]

コンソールに何かを出力するために使用しているメソッドはConsole.WriteLineです。リンクされたページに移動すると、そのメソッドの多くのオーバーロードが表示され、すべてが異なる種類のパラメーターを取ります。type の引数を渡すときにどちらが使用されているか考えてみましょうList<char>

そのリストを注意深く見ると、 を取るオーバーロードがないことがわかりますList<anything>。ご存知のように、.NET ではすべての型が から派生します。System.Objectつまり、すべての型は の一種です System.ObjectC# コンパイラがメソッドのオーバーロードを選択しようとして、正確な型の解決に失敗すると、元に戻って一種の関係を探します。私たちの場合、一致する唯一のオーバーロードは、 を取るものSystem.Objectです。

では、このオーバーロードは何をするのでしょうか? 説明を読めば簡単に理解できます。

値が null の場合、行末記号のみが書き込まれます。それ以外の場合は、value の ToString メソッドが呼び出されてその文字列表現が生成され、結果の文字列が標準出力ストリームに書き込まれます。

さて、文字のリストを渡すと、ToString() メソッドが呼び出されます。のToString() メソッドをList<T>見てみましょう。「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());

于 2013-01-27T04:43:16.343 に答える
0

ここで何を達成しようとしているのかわかりません。特定の文字を取得するために、文字列に常にインデックスを付けることができます。

では、なぜ a を導入しList、なぜファンキーな方法を使用するのでしょうか。ただ行う:

s[i]
于 2013-01-27T04:17:53.777 に答える
0

いいえ、配列は役に立ちません。コレクションの内容を出力するには、収集された各要素をループする必要があります。

Usinglist.ToString()は、標準オブジェクトの ToString implementation を呼び出すToString()onList<T>を呼び出します。これは、表示されている型の名前を出力するためのものです。

それを反復して、代わりに各要素にアクセスする必要があります。

foreach(var item in list) {
    string s = item.ToString();
}
于 2013-01-27T04:19:18.833 に答える
0

これを試して:

Console.WriteLine(new string(ex.Columns(line).ToArray()));
于 2013-01-27T04:20:56.967 に答える