すべてList
のデータベース名を含む があります。そのリストに含まれるアイテムをコンソールに表示する必要があります (を使用Console.WriteLine()
)。どうすればこれを達成できますか?
7 に答える
リストにはメソッドがあり、メソッドグループとして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)
この場合)。
との答え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"
備考 :
区切り文字がnullの場合、代わりに空の文字列 ( String.Empty
) が使用されます。values のいずれかのメンバーが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
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
の利点の 1 つList<T>.ForEach
は、具体的なリスト型がある場合に、最も適切なオーバーロードが使用されることです。例えば:
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
ところで、 をメソッド グループとして使用していることに注意してください。これは、ラムダ式を使用するよりも簡潔であり、実際にはわずかに効率的です (デリゲートは、単にConsole.WriteLine
を呼び出すメソッドの呼び出しではなく、単にの呼び出しになるためConsole.WriteLine
)。
次のように、List の組み込みの foreach を使用することもできます。
List<T>.ForEach(item => Console.Write(item));
このコードの実行速度も大幅に高速化されています。
上記のコードでは、次のように Console.WriteLine を操作することもできます。
List<T>.ForEach(item => Console.Write(item + ",")); //Put a,b etc.