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 回答