2015年1月3日土曜日

DefaultIfEmpty

■public static IEnumerable DefaultIfEmpty(this IEnumerable source);
// 概要:
// 指定したシーケンスの要素を返します。シーケンスが空の場合はシングルトン コレクションにある型パラメーターの既定値を返します。
//
// パラメーター:
// source:
// シーケンスが空の場合に、既定値を返すシーケンス。
//
// 型パラメーター:
// TSource:
// source の要素の型。
//
// 戻り値:
// source が空の場合、TSource 型の既定値を格納する System.Collections.Generic.IEnumerable
// オブジェクト。それ以外の場合は source。
//
// 例外:
// System.ArgumentNullException:
// source が null です。

最初に配列の要素数を用意し、あるルールに従ってその数字の要素数に値を格納する時
残った部分が未定義になってしまうのでDefault値を設定してしまおうという場合
using System;
using System.Linq;

namespace SampleCode {
    class Program {
        static void Main(string[] args) {

            int[] numList = new int[10];
            numList[3] = 3;
            numList[5] = 5;

            var numDefault = numList.DefaultIfEmpty();

            foreach (var num in numDefault) {
                Console.WriteLine(num);
            }
        }
    }
}
要素番号3,5以外は0になります。


ちなみに、Listに使うとnullが代入されます
using System;
using System.Collections.Generic;
using System.Linq;

namespace SampleCode {
    class Program {
        static void Main(string[] args) {

            List strList = new List();
            Console.WriteLine(strList.Count()); //0

            var strDefault = strList.DefaultIfEmpty();
            Console.WriteLine(strDefault.Count()); //0

            foreach (var str in strDefault) {
                Console.WriteLine(str == null); //True
            }
        }
    }
}

0 件のコメント:

コメントを投稿