今回は、Containsメソッドについてです。
Containsメソッドは、指定された要素がシーケンス内に存在するか否かを返します。
List.Containsなどと同じですね。
書式は以下の通り。
public static bool Contains<TSource>( this IEnumerable<TSource> source, TSource value ) public static bool Contains<TSource>( this IEnumerable<TSource> source, TSource value, IEqualityComparer<TSource> comparer )
2つ目の書式は、IEqualityComparerを指定できます。
カスタムオブジェクトのシーケンスに対して、よく利用します。
以下、サンプルです。
#region LinqSamples-42 public class LinqSamples42 : IExecutable { class Language { public string Name { get; set; } public static Language Create(string name) { return new Language { Name = name }; } } class LanguageNameComparer : EqualityComparer<Language> { public override bool Equals(Language l1, Language l2) { return (l1.Name == l2.Name); } public override int GetHashCode(Language l) { return l.Name.GetHashCode(); } } public void Execute() { // // Containsメソッドは、指定された要素がシーケンス内に存在するか否かを返す。 // // IEqualityComparer<T>を指定するオーバーロードも存在する。 // var names = new string[] { "csharp", "visualbasic", "java", "python", "ruby", "php" }; Console.WriteLine("要素[python]は存在する? = {0}", names.Contains("python")); // // IEqualityComparer<T>を指定するバージョン. // var languages = new Language[] { Language.Create("csharp"), Language.Create("visualbasic"), Language.Create("java"), Language.Create("python"), Language.Create("ruby"), Language.Create("php") }; Console.WriteLine( "要素[python]は存在する? = {0}", languages.Contains(Language.Create("python"), new LanguageNameComparer()) ); } } #endregion
実行結果は以下の通りです。
要素[python]は存在する? = True 要素[python]は存在する? = True
================================
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ