web-dev-qa-db-ja.com

C#でコンソールウィンドウにリストアイテムを表示する方法

すべてのデータベース名を含むListがあります。そのリストに含まれるアイテムをコンソールに表示する必要があります(Console.WriteLine()を使用)。どうすればこれを達成できますか?

36
ravikiran

リストにはForEachメソッドがあり、メソッドグループとして_Console.WriteLine_を渡すことができるため、実際には非常に簡単に実行できます。コンパイラーは、暗黙的な変換を使用してメソッドグループをこの場合_Action<int>_に変換し、グループから最も具体的なメソッド(この場合Console.WriteLine(int))を選択します。

_  var list = new List<int>(Enumerable.Range(0, 50));

  list.ForEach(Console.WriteLine);
_

文字列でも動作=)

まったくつじつまが合うように(そして、私はあなたの答えを変更することを提案していません-単に興味のためにコメントするだけです)_Console.WriteLine_はメソッドグループです。次に、コンパイラは、メソッドグループから_Action<int>_への暗黙的な変換を使用して、最も具体的なメソッド(この場合はConsole.WriteLine(int))を選択します。

51
Svish

アイテムがToStringを適切にオーバーライドすると仮定します:

_public void WriteToConsole(IEnumerable items)
{
    foreach (object o in items)
    {
        Console.WriteLine(o);
    }
}
_

(このループでジェネリックを使用しても利点はありません-いずれにせよConsole.WriteLine(object)を呼び出すことになりますので、この場合はforeach部分と同じようにボックス化されます。 )

編集:_List<T>.ForEach_を使用した回答は非常に良いです。

上記の私のループは、任意のシーケンス(LINQ式の結果など)がある場合により柔軟ですが、_List<T>_が間違いなくある場合は、_List<T>.ForEach_の方が良いと言えますオプション。

_List<T>.ForEach_の利点の1つは、具象リスト型がある場合、最も適切なオーバーロードを使用することです。例えば:

_List<int> integers = new List<int> { 1, 2, 3 };
List<string> strings = new List<string> { "a", "b", "c" };

integers.ForEach(Console.WriteLine);
strings.ForEach(Console.WriteLine);
_

整数を書き出す場合、Console.WriteLine(int)を使用しますが、文字列を書き出す場合、Console.WriteLine(string)を使用します。特定のオーバーロードが利用できない場合(または汎用_List<T>_を使用しているだけで、コンパイラがTが何であるかを知らない場合)、Console.WriteLine(object)を使用します。

ちなみに、メソッドグループとして_Console.WriteLine_を使用していることに注意してください。これは、ラムダ式を使用するよりも簡潔で、実際にはわずかより効率的です(デリゲートがjustを呼び出すのではなく、_Console.WriteLine_を呼び出すようになるため)順番に_Console.WriteLine_)を呼び出すメソッド。

24
Jon Skeet

_List<T>.ForEach_を使用した答えは非常に優れています。

String.Join<T>(string separator, IEnumerable<T> values) メソッドの方が便利だと思いました。

例:

_List<string> numbersStrLst = new List<string>
            { "One", "Two", "Three","Four","Five"};

Console.WriteLine(String.Join(", ", numbersStrLst));//Output:"One, Two, Three, Four, Five"

int[] numbersIntAry = new int[] {1, 2, 3, 4, 5};
Console.WriteLine(String.Join("; ", numbersIntAry));//Output:"1; 2; 3; 4; 5"
_

備考 :

Separatorがnullの場合、代わりに空の文字列(_String.Empty_)が使用されます。値のメンバーのいずれかがnullの場合、代わりに空の文字列が使用されます。

Join(String, IEnumerable<String>)は、IEnumerable(Of String)コレクションの各要素を最初に要素に変換せずに連結できる便利なメソッドです文字列配列。特に、言語統合クエリ(LINQ)クエリ式で役立ちます。

これは問題に対してはうまく機能するはずですが、他の場合は配列値を持っています。この同じメソッドの他のオーバーロード String.Join Method(String、Object []) を使用します

参照: https://msdn.Microsoft.com/en-us/library/dd783876(v = vs.110).aspx

19
Bhramar

次のようなリストの組み込みforeachを使用することもできます。

List<T>.ForEach(item => Console.Write(item));

このコードも実行されます かなり もっと早く!

上記のコードにより、次のようにConsole.WriteLineを操作することもできます。

List<T>.ForEach(item => Console.Write(item + ",")); //Put a,b etc.
15
CasperT
Console.WriteLine(string.Join<TYPE>("\n", someObjectList));
9
BlackCoffee

私はこれを理解しやすいと感じました:

List<string> names = new List<string> { "One", "Two", "Three", "Four", "Five" };
        for (int i = 0; i < names.Count; i++)
        {
            Console.WriteLine(names[i]);
        }
1
Adola

データベーステーブルからのコマンドプロンプトでいくつかのデータを表示する必要があると仮定します。最初にリストを作成します。 Team_Detailsは私のプロパティクラスです。

    List<Team_Details> teamDetails = new List<Team_Details>();

次に、データベースに接続して、データ取得部分を実行し、次のようにリストに保存します。

            string connetionString = "Data Source=.;Initial Catalog=your DB name;Integrated Security=True;MultipleActiveResultSets=True";
            using (SqlConnection conn = new SqlConnection(connetionString)){
            string getTeamDetailsQuery = "select * from Team";
            conn.Open();
            using (SqlCommand cmd = new SqlCommand(getTeamDetailsQuery, conn))
                    {
                        SqlDataReader rdr = cmd.ExecuteReader();
                    {
                        teamDetails.Add(new Team_Details
                        {
                            Team_Name = rdr.GetString(rdr.GetOrdinal("Team_Name")),
                            Team_Lead = rdr.GetString(rdr.GetOrdinal("Team_Lead")),
                        });
                    }

次に、コマンドプロンプトでこのリストを次のように印刷できます。

foreach (Team_Details i in teamDetails)
                        {
                            Console.WriteLine(i.Team_Name);
                            Console.WriteLine(i.Team_Lead);
                        }
1