このページでは、コレクションを操作するための拡張メソッドについてまとめていきます。
コレクションに対する拡張メソッドの主な処理は、要素の追加と削除やコレクションに要素が存在するかどうかを判定するものとなります。
拡張メソッドがイマイチよくわかっていない方は、以下の記事が参考になります。
目次
- 1 コレクションの拡張メソッド CollectionExtensions
- 2 CollectionExtensions クラスのメソッド一覧
- 3 AddIf メソッド
- 4 AddIfNotContains メソッド
- 5 AddRange メソッド
- 6 AddRangeIf メソッド
- 7 AddRangeIfNotContains メソッド
- 8 ContainsAll メソッド
- 9 ContainsAny メソッド
- 10 IsEmpty メソッド
- 11 IsNotEmpty メソッド
- 12 IsNotNullAndEmpty メソッド
- 13 IsNullOrEmpty メソッド
- 14 RemoveIf メソッド
- 15 RemoveIfContains メソッド
- 16 RemoveRange メソッド
- 17 RemoveRangeIf メソッド
- 18 RemoveRangeIfContains メソッド
- 19 RemoveWhere メソッド
- 20 参考記事
コレクションの拡張メソッド CollectionExtensions
コレクションの拡張メソッドは CollectionExtensions クラスに実装しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
using System; using System.Collections.Generic; using System.Linq; namespace Extensions { /// <summary> /// コレクションの拡張メソッドクラス /// </summary> public static class CollectionExtensions { // ... } } |
CollectionExtensions クラスのメソッド一覧
CollectionExtensions クラスに実装しているメソッドの一覧です。
メソッド名 | 説明 |
---|---|
AddIf | 指定した条件を満たす場合に要素を追加します。 |
AddIfNotContains | 特定の要素がコレクションに格納されていなければ追加します。 |
AddRange | コレクションに複数の要素を追加します。 |
AddRangeIf | 複数の要素のそれぞれに対して指定した条件を満たす場合に追加します。 |
AddRangeIfNotContains | 複数の要素のうち、コレクションに格納されていない要素を追加します。 |
ContainsAll | 複数の要素のすべてがコレクションに格納されているかどうかを判定します。 |
ContainsAny | 複数の要素のいずれかがコレクションに格納されているかどうかを判定します。 |
IsEmpty | コレクションが空であるか (要素が格納されていないか) どうかを判定します。 |
IsNotEmpty | コレクションが空でないか (要素が格納されているか) どうかを判定します。 |
IsNotNullAndEmpty | コレクションが Null 及び空でないかどうかを判定します。 |
IsNullOrEmpty | コレクションが Null または空であるかどうかを判定します。 |
RemoveIf | 指定した条件を満たす場合に要素を削除します。 |
RemoveIfContains | 特定の要素がコレクションに格納されていなければ削除します。 |
RemoveRange | コレクションから複数の要素を削除します。 |
RemoveRangeIf | 複数の要素のそれぞれに対して指定した条件を満たす場合に削除します。 |
RemoveRangeIfContains | 複数の要素のうち、コレクションに格納されている要素を削除します。 |
RemoveWhere | コレクション内の条件を満たす要素をすべて削除します。 条件を表す関数の形式: Func |
RemoveWhere | コレクション内の条件を満たす要素をすべて削除します。 条件を表す関数の形式: Func |
AddIf メソッド
追加する要素が指定した条件を満たす場合にコレクションに追加するメソッドです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
/// <summary> /// 指定した条件を満たす場合に要素を追加します。 /// </summary> /// <typeparam name="T">対象の型</typeparam> /// <param name="this">対象のコレクション</param> /// <param name="predicate">追加する要素が条件を満たしているかどうかをテストする関数</param> /// <param name="item">追加する要素</param> public static bool AddIf<T>(this ICollection<T> @this, Predicate<T> predicate, T item) { if (predicate(item)) { @this.Add(item); return true; } return false; } |
AddIfNotContains メソッド
追加する要素がコレクション内になければコレクションに追加するメソッドです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
/// <summary> /// 特定の要素がコレクションに格納されていなければ追加します。 /// </summary> /// <typeparam name="T">対象の型</typeparam> /// <param name="this">対象のコレクション</param> /// <param name="item">追加する要素</param> /// <returns>要素を追加できた場合に true を返します。</returns> public static bool AddIfNotContains<T>(this ICollection<T> @this, T item) { if (!@this.Contains(item)) { @this.Add(item); return true; } return false; } |
AddRange メソッド
複数の要素をコレクションに追加するメソッドです。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
/// <summary> /// コレクションに複数の要素を追加します。 /// </summary> /// <typeparam name="T">対象の型</typeparam> /// <param name="this">対象のコレクション</param> /// <param name="items">追加する要素</param> public static void AddRange<T>(this ICollection<T> @this, params T[] items) { foreach (T item in items) { @this.Add(item); } } |
AddRangeIf メソッド
追加する要素が指定した条件を満たす場合にコレクションに追加するメソッドです。
要素は一度に複数指定できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
/// <summary> /// 複数の要素のそれぞれに対して指定した条件を満たす場合に追加します。 /// </summary> /// <typeparam name="T">対象の型</typeparam> /// <param name="this">対象のコレクション</param> /// <param name="predicate">追加する要素が条件を満たしているかどうかをテストする関数</param> /// <param name="items">追加する要素</param> public static void AddRangeIf<T>(this ICollection<T> @this, Predicate<T> predicate, params T[] items) { foreach (T item in items) { if (predicate(item)) { @this.Add(item); } } } |
AddRangeIfNotContains メソッド
追加する要素がコレクション内になければコレクションに追加するメソッドです。
要素は一度に複数指定できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
/// <summary> /// 複数の要素のうち、コレクションに格納されていない要素を追加します。 /// </summary> /// <typeparam name="T">対象の型</typeparam> /// <param name="this">対象のコレクション</param> /// <param name="items">追加する要素</param> public static void AddRangeIfNotContains<T>(this ICollection<T> @this, params T[] items) { foreach (T item in items) { if (!@this.Contains(item)) { @this.Add(item); } } } |
ContainsAll メソッド
指定した要素のすべてがコレクション内にあるかどうかを示す値を取得するメソッドです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
/// <summary> /// 複数の要素のすべてがコレクションに格納されているかどうかを判定します。 /// </summary> /// <typeparam name="T">対象の型</typeparam> /// <param name="this">対象のコレクション</param> /// <param name="items">追加する要素</param> /// <returns>要素を追加できた場合に true を返します。</returns> public static bool ContainsAll<T>(this ICollection<T> @this, params T[] items) { foreach (T item in items) { if (!@this.Contains(item)) { return false; } } return true; } |
ContainsAny メソッド
指定した要素のいずれかがコレクション内にあるかどうかを示す値を取得するメソッドです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
/// <summary> /// 複数の要素のいずれかがコレクションに格納されているかどうかを判定します。 /// </summary> /// <typeparam name="T">対象の型</typeparam> /// <param name="this">対象のコレクション</param> /// <param name="items">追加する要素</param> /// <returns>要素を追加できた場合に true を返します。</returns> public static bool ContainsAny<T>(this ICollection<T> @this, params T[] items) { foreach (T item in items) { if (@this.Contains(item)) { return true; } } return false; } |
IsEmpty メソッド
コレクション内に要素がないかどうかを示す値を取得するメソッドです。
1 2 3 4 5 6 7 8 9 10 |
/// <summary> /// コレクションが空であるか (要素が格納されていないか) どうかを判定します。 /// </summary> /// <typeparam name="T">対象の型</typeparam> /// <param name="this">対象のコレクション</param> /// <returns>要素が格納されていなければ true を返します。</returns> public static bool IsEmpty<T>(this ICollection<T> @this) { return @this.Count == 0; } |
IsNotEmpty メソッド
コレクション内に要素があるかどうかを示す値を取得するメソッドです。
1 2 3 4 5 6 7 8 9 10 |
/// <summary> /// コレクションが空でないか (要素が格納されているか) どうかを判定します。 /// </summary> /// <typeparam name="T">対象の型</typeparam> /// <param name="this">対象のコレクション</param> /// <returns>要素が格納されている場合に true を返します。</returns> public static bool IsNotEmpty<T>(this ICollection<T> @this) { return @this.Count != 0; } |
IsNotNullAndEmpty メソッド
コレクションがnullでなくコレクション内に要素があるかどうかを示す値を取得するメソッドです。
1 2 3 4 5 6 7 8 9 10 |
/// <summary> /// コレクションが Null 及び空でないかどうかを判定します。 /// </summary> /// <typeparam name="T">対象の型</typeparam> /// <param name="this">対象のコレクション</param> /// <returns>Null 及び空でない場合に true を返します。</returns> public static bool IsNotNullAndEmpty<T>(this ICollection<T> @this) { return @this != null && @this.Count != 0; } |
IsNullOrEmpty メソッド
コレクションがnullまたはコレクション内に要素がないかどうかを示す値を取得するメソッドです。
1 2 3 4 5 6 7 8 9 10 |
/// <summary> /// コレクションが Null または空であるかどうかを判定します。 /// </summary> /// <typeparam name="T">Generic type parameter.</typeparam> /// <param name="this">The @this to act on.</param> /// <returns>Null または空である場合に true を返します。</returns> public static bool IsNullOrEmpty<T>(this ICollection<T> @this) { return @this == null || @this.Count == 0; } |
RemoveIf メソッド
削除する要素が指定した条件を満たす場合にコレクションから削除するメソッドです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
/// <summary> /// 指定した条件を満たす場合に要素を削除します。 /// </summary> /// <typeparam name="T">対象の型</typeparam> /// <param name="this">対象のコレクション</param> /// <param name="predicate">削除する要素が条件を満たしているかどうかをテストする関数</param> /// <param name="item">削除する要素</param> public static void RemoveIf<T>(this ICollection<T> @this, Predicate<T> predicate, T item) { if (predicate(item)) { @this.Remove(item); } } |
RemoveIfContains メソッド
削除する要素がコレクション内にあればコレクションから削除するメソッドです。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
/// <summary> /// 特定の要素がコレクションに格納されていなければ削除します。 /// </summary> /// <typeparam name="T">対象の型</typeparam> /// <param name="this">対象のコレクション</param> /// <param name="item">削除する要素</param> public static void RemoveIfContains<T>(this ICollection<T> @this, T item) { if (@this.Contains(item)) { @this.Remove(item); } } |
RemoveRange メソッド
複数の要素をコレクションから削除するメソッドです。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
/// <summary> /// コレクションから複数の要素を削除します。 /// </summary> /// <typeparam name="T">対象の型</typeparam> /// <param name="this">対象のコレクション</param> /// <param name="items">削除する要素</param> public static void RemoveRange<T>(this ICollection<T> @this, params T[] items) { foreach (T item in items) { @this.Remove(item); } } |
RemoveRangeIf メソッド
削除する要素が指定した条件を満たす場合にコレクションから削除するメソッドです。
要素は一度に複数指定できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
/// <summary> /// 複数の要素のそれぞれに対して指定した条件を満たす場合に削除します。 /// </summary> /// <typeparam name="T">対象の型</typeparam> /// <param name="this">対象のコレクション</param> /// <param name="predicate">削除する要素が条件を満たしているかどうかをテストする関数</param> /// <param name="items">削除する要素</param> public static void RemoveRangeIf<T>(this ICollection<T> @this, Predicate<T> predicate, params T[] items) { foreach (T item in items) { if (predicate(item)) { @this.Remove(item); } } } |
RemoveRangeIfContains メソッド
削除する要素がコレクション内にあればコレクションから削除するメソッドです。
要素は一度に複数指定できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
/// <summary> /// 複数の要素のうち、コレクションに格納されている要素を削除します。 /// </summary> /// <typeparam name="T">対象の型</typeparam> /// <param name="this">対象のコレクション</param> /// <param name="items">削除する要素</param> public static void RemoveRangeIfContains<T>(this ICollection<T> @this, params T[] items) { foreach (T item in items) { if (@this.Contains(item)) { @this.Remove(item); } } } |
RemoveWhere メソッド
指定した条件を満たすコレクション内の要素をコレクションから削除するメソッドです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
/// <summary> /// コレクション内の条件を満たす要素をすべて削除します。 /// </summary> /// <typeparam name="T">対象の型</typeparam> /// <param name="this">対象のコレクション</param> /// <param name="predicate">コレクションの各要素が条件を満たしているかどうかをテストする関数</param> public static void RemoveWhere<T>(this ICollection<T> @this, Func<T, bool> predicate) { List<T> list = @this.Where(predicate).ToList(); foreach (T item in list) { @this.Remove(item); } } /// <summary> /// コレクション内の条件を満たす要素をすべて削除します。 /// </summary> /// <typeparam name="T">対象の型</typeparam> /// <param name="this">対象のコレクション</param> /// <param name="predicate">コレクションの各要素が条件を満たしているかどうかをテストする関数</param> public static void RemoveWhere<T>(this ICollection<T> @this, Func<T, int, bool> predicate) { List<T> list = @this.Where(predicate).ToList(); foreach (T item in list) { @this.Remove(item); } } |
RemoveWhere メソッドは、条件を表す関数がコレクションの要素を引数に受けて判定結果を返す「Func<T, bool>」の形式と、コレクションの要素とインデックスを引数に受けて判定結果を返す「Func<T, int, bool>」の形式の2種類になります。
今後もコレクションの拡張メソッドが増えてきたら随時追加していきます。
参考記事
文字列の拡張メソッドについては、以下の記事をご参照ください。
日付と時間の拡張メソッドについては、以下の記事をご参照ください。
10進数の拡張メソッドについては、以下の記事をご参照ください。
倍精度浮動小数点数の拡張メソッドについては、以下の記事をご参照ください。