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));
}
答案 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()
。