forked from nhibernate/nhibernate-core
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathEnumerableExtensions.cs
130 lines (108 loc) · 3.04 KB
/
EnumerableExtensions.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
namespace NHibernate.Util
{
//TODO 6.0: Make internal
public static class EnumerableExtensions
{
//Since v5.1
[Obsolete("Please use Enumerable.Any<T>(IEnumerable<T>) instead.")]
public static bool Any(this IEnumerable source)
{
return Enumerable.Any(source.Cast<object>());
}
//Since v5.1
[Obsolete("Please use Enumerable.First<T>(IEnumerable<T>) instead.")]
public static object First(this IEnumerable source)
{
return Enumerable.First(source.Cast<object>());
}
//Since v5.1
[Obsolete("Please use Enumerable.FirstOrDefault<T>(IEnumerable<T>) instead.")]
public static object FirstOrNull(this IEnumerable source)
{
return Enumerable.FirstOrDefault(source.Cast<object>());
}
//Since v5.1
[Obsolete("Please use a loop instead.")]
public static void ForEach<T>(this IEnumerable<T> query, Action<T> method)
{
foreach (var item in query)
{
method(item);
}
}
internal static TOutput[] ToArray<TInput, TOutput>(this ICollection<TInput> input, Func<TInput, TOutput> converter)
{
var results = new TOutput[input.Count];
int i = 0;
foreach (var value in input)
{
results[i++] = converter(value);
}
return results;
}
internal static TOutput[] ToArray<TInput, TOutput>(this List<TInput> input, Func<TInput, TOutput> converter)
{
var results = new TOutput[input.Count];
for (var i = 0; i < input.Count; i++)
{
results[i] = converter(input[i]);
}
return results;
}
internal static TOutput[] ToArray<TInput, TOutput>(this TInput[] input, Converter<TInput, TOutput> converter)
{
return Array.ConvertAll(input, converter);
}
internal static List<TOutput> ToList<TInput, TOutput>(this ICollection<TInput> input, Func<TInput, TOutput> converter)
{
var results = new List<TOutput>(input.Count);
foreach (var value in input)
{
results.Add(converter(value));
}
return results;
}
internal static List<TOutput> ToList<TInput, TOutput>(this TInput[] input, Func<TInput, TOutput> converter)
{
var results = new List<TOutput>(input.Length);
foreach (var value in input)
{
results.Add(converter(value));
}
return results;
}
internal static List<TOutput> ToList<TInput, TOutput>(this List<TInput> input, Converter<TInput, TOutput> converter)
{
return input.ConvertAll(converter);
}
internal static IList ToIList<T>(this IEnumerable<T> list)
{
return list as IList ?? list.ToList();
}
internal static IReadOnlyList<T> EmptyIfNull<T>(this IReadOnlyList<T> list)
{
return list ?? Array.Empty<T>();
}
internal static IEnumerable<T> CastOrDefault<T>(this IEnumerable list)
{
foreach (var obj in list)
{
yield return obj == null
? default(T)
: (T) obj;
}
}
#if NETFX && !NET471_OR_GREATER
internal static IEnumerable<TSource> Append<TSource>(this IEnumerable<TSource> source, TSource element)
{
foreach (var item in source)
yield return item;
yield return element;
}
#endif
}
}