すべてのデータベース名を含むList
があります。そのリストに含まれるアイテムをコンソールに表示する必要があります(Console.WriteLine()
を使用)。どうすればこれを達成できますか?
リストには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)
)を選択します。
アイテムが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
_)を呼び出すメソッド。
_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
次のようなリストの組み込みforeachを使用することもできます。
List<T>.ForEach(item => Console.Write(item));
このコードも実行されます かなり もっと早く!
上記のコードにより、次のようにConsole.WriteLineを操作することもできます。
List<T>.ForEach(item => Console.Write(item + ",")); //Put a,b etc.
Console.WriteLine(string.Join<TYPE>("\n", someObjectList));
私はこれを理解しやすいと感じました:
List<string> names = new List<string> { "One", "Two", "Three", "Four", "Five" };
for (int i = 0; i < names.Count; i++)
{
Console.WriteLine(names[i]);
}
データベーステーブルからのコマンドプロンプトでいくつかのデータを表示する必要があると仮定します。最初にリストを作成します。 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);
}