0

配列から要素を取得し、範囲外の場合はデフォルト値を返す linq の解決策はありますか?

static void Main(string[] args)
{
    var arr = new int[] { 5, 4, 8 };
    //Console.WriteLine("{0}", arr[5] ?? 6);
    //nah Console.WriteLine("{0}", arr.GetElementOrNull(5) ?? 6);
    Console.WriteLine("{0}", arr.GetElementOrValue(5, 6));
}
4

2 に答える 2

2

デフォルト値(null、ゼロなど)だけが必要な場合は、組み込みを使用できますElementAtOrDefault

Console.WriteLine("{0}", arr.ElementAtOrDefault(5));

ただし、独自の「デフォルト」値 (たとえば 6) を指定する場合は、それを行うための独自の拡張メソッドを提供する必要があります。

Console.WriteLine("{0}", arr.ElementAtOrValue(5, 6));

public static class EnumerableExtensions
{
    public static T ElementAtOrValue<T>(
        this IEnumerable<T> source, int index, T defaultValue)
    {
        if (source == null) throw new ArgumentNullException("source");
        if (index >= 0)
        {
            var list = source as IList<T>;
            if (list != null)
            {
                if (index < list.Count) return list[index];
            }
            else
            {
                using (var enumerator = source.GetEnumerator())
                {
                    while (enumerator.MoveNext())
                    {
                        if (index-- == 0) return enumerator.Current;
                    }
                }
            }
        }
        return defaultValue;
    }
}
于 2013-08-17T16:06:25.987 に答える
0

FirstOrDefault()もちろん、 LINQ クエリで使用できます。

詳細はこちら:公式ドキュメント

于 2013-08-17T16:04:28.307 に答える