获取元素或默认值?

时间:2013-08-17 15:57:54

标签: .net linq

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));
}

2 个答案:

答案 0 :(得分:2)

如果你只想要默认值(null,zero等),那么你可以使用内置的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;
    }
}

答案 1 :(得分:0)

当然,您可以在LINQ查询中使用FirstOrDefault()

更多信息:Official documentation