C#のDefaultIfEmptyメソッドとは?空のコレクションに既定値を返す使い方を解説
C#のLINQに用意されているDefaultIfEmptyメソッドは、空のコレクションを安全に扱うための便利なメソッドです。コレクションが空の場合にエラーを発生させる代わりに、要素の型に応じた既定値(デフォルト値)を返してくれます。
DefaultIfEmptyメソッドの基本
まず、次のように宣言された空のリストを見てみましょう。
List<double> myList = new List<double>();
このリストには要素が1つも含まれていません。このような空のコレクションに対してDefaultIfEmptyメソッドを呼び出すと、エラーになることなく、既定値を1つだけ含むシーケンスが返されます。
var res = myList.DefaultIfEmpty();
それでは、実際の動作をサンプルコードで確認してみましょう。
サンプルコード
using System;
using System.Linq;
using System.Collections.Generic;
class Demo {
static void Main() {
// 空のリストを作成
List<double> myList = new List<double>();
// DefaultIfEmptyで既定値を取得
var res = myList.DefaultIfEmpty();
foreach (var a in res) {
Console.WriteLine(a);
}
}
}
実行結果
0
ポイント解説
実行結果として「0」が出力されました。これはdouble型の既定値です。リストが空だったため、DefaultIfEmptyメソッドが型の既定値を1つだけ含むシーケンスを返したことがわかります。
なお、DefaultIfEmptyメソッドには引数で任意の既定値を指定できるオーバーロードも用意されています。例えば「myList.DefaultIfEmpty(9.9)」と記述すれば、リストが空の場合に9.9が返されます。また、このメソッドは左外部結合(Left Join)を実現する際にもよく活用されるため、合わせて覚えておくと便利です。
-
C#のLinkedList.AddAfterメソッドでノードを後ろに追加する方法
LinkedList.AddAfterメソッドとはC#のLinkedList<T>クラスには、指定したノードの後ろに新しいノードを挿入するためのAddAfterメソッドが用意されています。連結リストの中間位置に要素を追加したい場合に活躍するメソッドです。まず、LinkedListを用意します。int[] num = {1, 2, 3, 4, 5}; LinkedList<int> list = new LinkedList<int>(num);次に、AddLast()メソッドを使ってリストの末尾にノードを追加します。var newNode = list.Ad
-
C#のOfType()メソッドの使い方:要素の型でコレクションをフィルタリングする方法
C#のOfType()メソッドとは C#のOfType()メソッドは、LINQ拡張メソッドの一つで、コレクション内の各要素の型に基づいてフィルタリングを行うための機能です。異なる型が混在するコレクションから、特定の型の要素だけを抽出したい場合に非常に便利です。 基本的な仕組み 例えば、文字列と整数が混在する以下のようなリストがあるとします。 list.Add(Katie); list.Add(100); list.Add(200); このリストからstring型の要素のみを抽出するには、次のようにOfType<string>()を使用します。 var myStr = from a