いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

Linq入門記-50 (LINQ To Object, ElementAt, ElementAtOrDefault)

今回は、ElementAt拡張メソッドとElementAtOrDefault拡張メソッドについてです。
どちらも、前回と前々回に記述したFirst,FirstOrDefault拡張メソッドなどと同じ動きをします。


ElementAtは指定されたインデックス位置の要素を返します。
ElementAtOrDefaultは、範囲外のインデックスを指定された場合に規定値を返します。


書式は以下の通り。

public static TSource ElementAt<TSource>(
	this IEnumerable<TSource> source,
	int index
)

public static TSource ElementAtOrDefault<TSource>(
	this IEnumerable<TSource> source,
	int index
)


以下、サンプルです。

    #region LinqSample-47
    public class LinqSamples47 : IExecutable
    {
        public void Execute()
        {
            //
            // ElementAt拡張メソッドは、指定した位置の要素を取得するメソッド。
            //
            // 範囲外のインデックスを指定した場合は例外が発生する.
            //
            var languages = new string[] { "csharp", "visualbasic", "java", "python", "ruby", "php", "c++" };
            Console.WriteLine(languages.ElementAt(1));
            
            try
            {
                languages.ElementAt(100);
            }
            catch(ArgumentOutOfRangeException)
            {
                Console.WriteLine("要素の範囲外のインデックスを指定している。");
            }
            
            //
            // ElementAtOrDefault拡張メソッドは、ElementAt拡張メソッドと同じ動作を
            // しながら、範囲外のインデックスを指定された場合に規定値を返すメソッド。
            //
            Console.WriteLine(languages.ElementAtOrDefault(-1)  ?? "null");
            Console.WriteLine(languages.ElementAtOrDefault(100) ?? "null");
        }
    }
    #endregion


実行結果は以下の通りです。

  visualbasic
  要素の範囲外のインデックスを指定している。
  null
  null

================================
過去の記事については、以下のページからご参照下さい。