if (list != null)
return list [index];
+#if NET_4_5
+ var readOnlyList = source as IReadOnlyList<TSource>;
+ if (readOnlyList != null)
+ return readOnlyList[index];
+#endif
+
return source.ElementAt (index, Fallback.Throw);
}
if (list != null)
return index < list.Count ? list [index] : default (TSource);
+#if NET_4_5
+ var readOnlyList = source as IReadOnlyList<TSource>;
+ if (readOnlyList != null)
+ return index < readOnlyList.Count ? readOnlyList [index] : default (TSource);
+#endif
+
return source.ElementAt (index, Fallback.Default);
}
foreach (TOuter element in outer) {
TKey outerKey = outerKeySelector (element);
- if (innerKeys.Contains (outerKey))
+ if (outerKey != null && innerKeys.Contains (outerKey))
yield return resultSelector (element, innerKeys [outerKey]);
else
yield return resultSelector (element, Empty<TInner> ());
foreach (TOuter element in outer) {
TKey outerKey = outerKeySelector (element);
- if (innerKeys.Contains (outerKey)) {
+ if (outerKey != null && innerKeys.Contains (outerKey)) {
foreach (TInner innerElement in innerKeys [outerKey])
yield return resultSelector (element, innerElement);
}