Skip to content

Commit dd3fc41

Browse files
authored
Implement missing generic overloads for Lambda.Expr and Lambda.Func (#14)
1 parent 42f2791 commit dd3fc41

File tree

4 files changed

+206
-3
lines changed

4 files changed

+206
-3
lines changed

ZySharp.Metaprogramming/Expr.Invoke.cs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,14 @@
33
using System.Diagnostics.Contracts;
44
using System.Linq.Expressions;
55

6+
using ZySharp.Validation;
7+
68
namespace ZySharp.Metaprogramming
79
{
810
public static partial class Expr
911
{
12+
#pragma warning disable S2436, S107
13+
1014
/// <summary>
1115
/// Compiles and invokes the given <paramref name="expression"/>.
1216
/// </summary>
@@ -20,6 +24,7 @@ public static partial class Expr
2024
public static TResult Invoke<TResult>(
2125
this Expression<Func<TResult>> expression)
2226
{
27+
ValidateArgument.For(expression, nameof(expression), v => v.NotNull());
2328
return expression.Compile().Invoke();
2429
}
2530

@@ -29,6 +34,7 @@ public static TResult Invoke<T1, TResult>(
2934
this Expression<Func<T1, TResult>> expression,
3035
T1 arg1)
3136
{
37+
ValidateArgument.For(expression, nameof(expression), v => v.NotNull());
3238
return expression.Compile().Invoke(arg1);
3339
}
3440

@@ -38,6 +44,7 @@ public static TResult Invoke<T1, T2, TResult>(
3844
this Expression<Func<T1, T2, TResult>> expression,
3945
T1 arg1, T2 arg2)
4046
{
47+
ValidateArgument.For(expression, nameof(expression), v => v.NotNull());
4148
return expression.Compile().Invoke(arg1, arg2);
4249
}
4350

@@ -47,6 +54,7 @@ public static TResult Invoke<T1, T2, T3, TResult>(
4754
this Expression<Func<T1, T2, T3, TResult>> expression,
4855
T1 arg1, T2 arg2, T3 arg3)
4956
{
57+
ValidateArgument.For(expression, nameof(expression), v => v.NotNull());
5058
return expression.Compile().Invoke(arg1, arg2, arg3);
5159
}
5260

@@ -56,6 +64,7 @@ public static TResult Invoke<T1, T2, T3, T4, TResult>(
5664
this Expression<Func<T1, T2, T3, T4, TResult>> expression,
5765
T1 arg1, T2 arg2, T3 arg3, T4 arg4)
5866
{
67+
ValidateArgument.For(expression, nameof(expression), v => v.NotNull());
5968
return expression.Compile().Invoke(arg1, arg2, arg3, arg4);
6069
}
6170

@@ -65,6 +74,7 @@ public static TResult Invoke<T1, T2, T3, T4, T5, TResult>(
6574
this Expression<Func<T1, T2, T3, T4, T5, TResult>> expression,
6675
T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5)
6776
{
77+
ValidateArgument.For(expression, nameof(expression), v => v.NotNull());
6878
return expression.Compile().Invoke(arg1, arg2, arg3, arg4, arg5);
6979
}
7080

@@ -74,6 +84,7 @@ public static TResult Invoke<T1, T2, T3, T4, T5, T6, TResult>(
7484
this Expression<Func<T1, T2, T3, T4, T5, T6, TResult>> expression,
7585
T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6)
7686
{
87+
ValidateArgument.For(expression, nameof(expression), v => v.NotNull());
7788
return expression.Compile().Invoke(arg1, arg2, arg3, arg4, arg5, arg6);
7889
}
7990

@@ -83,6 +94,7 @@ public static TResult Invoke<T1, T2, T3, T4, T5, T6, T7, TResult>(
8394
this Expression<Func<T1, T2, T3, T4, T5, T6, T7, TResult>> expression,
8495
T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7)
8596
{
97+
ValidateArgument.For(expression, nameof(expression), v => v.NotNull());
8698
return expression.Compile().Invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7);
8799
}
88100

@@ -92,6 +104,7 @@ public static TResult Invoke<T1, T2, T3, T4, T5, T6, T7, T8, TResult>(
92104
this Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TResult>> expression,
93105
T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8)
94106
{
107+
ValidateArgument.For(expression, nameof(expression), v => v.NotNull());
95108
return expression.Compile().Invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);
96109
}
97110

@@ -101,6 +114,7 @@ public static TResult Invoke<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult>(
101114
this Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult>> expression,
102115
T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9)
103116
{
117+
ValidateArgument.For(expression, nameof(expression), v => v.NotNull());
104118
return expression.Compile().Invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9);
105119
}
106120

@@ -110,6 +124,7 @@ public static TResult Invoke<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult>(
110124
this Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult>> expression,
111125
T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10)
112126
{
127+
ValidateArgument.For(expression, nameof(expression), v => v.NotNull());
113128
return expression.Compile().Invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10);
114129
}
115130

@@ -119,6 +134,7 @@ public static TResult Invoke<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResu
119134
this Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult>> expression,
120135
T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11)
121136
{
137+
ValidateArgument.For(expression, nameof(expression), v => v.NotNull());
122138
return expression.Compile().Invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11);
123139
}
124140

@@ -128,6 +144,7 @@ public static TResult Invoke<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
128144
this Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult>> expression,
129145
T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12)
130146
{
147+
ValidateArgument.For(expression, nameof(expression), v => v.NotNull());
131148
return expression.Compile().Invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12);
132149
}
133150

@@ -137,6 +154,7 @@ public static TResult Invoke<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
137154
this Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult>> expression,
138155
T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13)
139156
{
157+
ValidateArgument.For(expression, nameof(expression), v => v.NotNull());
140158
return expression.Compile().Invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13);
141159
}
142160

@@ -146,6 +164,7 @@ public static TResult Invoke<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
146164
this Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult>> expression,
147165
T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14)
148166
{
167+
ValidateArgument.For(expression, nameof(expression), v => v.NotNull());
149168
return expression.Compile().Invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14);
150169
}
151170

@@ -155,6 +174,7 @@ public static TResult Invoke<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
155174
this Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult>> expression,
156175
T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15)
157176
{
177+
ValidateArgument.For(expression, nameof(expression), v => v.NotNull());
158178
return expression.Compile().Invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15);
159179
}
160180

@@ -164,7 +184,10 @@ public static TResult Invoke<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
164184
this Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult>> expression,
165185
T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15, T16 arg16)
166186
{
187+
ValidateArgument.For(expression, nameof(expression), v => v.NotNull());
167188
return expression.Compile().Invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16);
168189
}
190+
191+
#pragma warning restore S2436, S107
169192
}
170193
}

ZySharp.Metaprogramming/Lambda.Expr.cs

Lines changed: 91 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ namespace ZySharp.Metaprogramming
77
{
88
public static partial class Lambda
99
{
10+
#pragma warning disable S2436, S107
11+
1012
/// <summary>
1113
/// Returns the given anonymous method as a lambda expression tree.
1214
/// </summary>
@@ -63,6 +65,94 @@ public static Expression<Func<T1, T2, T3, T4, T5, TResult>> Expr<T1, T2, T3, T4,
6365
return lambda;
6466
}
6567

66-
// TODO: T16
68+
/// <inheritdoc cref="Expr{TResult}"/>
69+
[Pure, ExcludeFromCodeCoverage]
70+
public static Expression<Func<T1, T2, T3, T4, T5, T6, TResult>> Expr<T1, T2, T3, T4, T5, T6, TResult>(
71+
Expression<Func<T1, T2, T3, T4, T5, T6, TResult>> lambda)
72+
{
73+
return lambda;
74+
}
75+
76+
/// <inheritdoc cref="Expr{TResult}"/>
77+
[Pure, ExcludeFromCodeCoverage]
78+
public static Expression<Func<T1, T2, T3, T4, T5, T6, T7, TResult>> Expr<T1, T2, T3, T4, T5, T6, T7, TResult>(
79+
Expression<Func<T1, T2, T3, T4, T5, T6, T7, TResult>> lambda)
80+
{
81+
return lambda;
82+
}
83+
84+
/// <inheritdoc cref="Expr{TResult}"/>
85+
[Pure, ExcludeFromCodeCoverage]
86+
public static Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TResult>> Expr<T1, T2, T3, T4, T5, T6, T7, T8, TResult>(
87+
Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TResult>> lambda)
88+
{
89+
return lambda;
90+
}
91+
92+
/// <inheritdoc cref="Expr{TResult}"/>
93+
[Pure, ExcludeFromCodeCoverage]
94+
public static Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult>> Expr<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult>(
95+
Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult>> lambda)
96+
{
97+
return lambda;
98+
}
99+
100+
/// <inheritdoc cref="Expr{TResult}"/>
101+
[Pure, ExcludeFromCodeCoverage]
102+
public static Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult>> Expr<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult>(
103+
Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult>> lambda)
104+
{
105+
return lambda;
106+
}
107+
108+
/// <inheritdoc cref="Expr{TResult}"/>
109+
[Pure, ExcludeFromCodeCoverage]
110+
public static Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult>> Expr<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult>(
111+
Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult>> lambda)
112+
{
113+
return lambda;
114+
}
115+
116+
/// <inheritdoc cref="Expr{TResult}"/>
117+
[Pure, ExcludeFromCodeCoverage]
118+
public static Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult>> Expr<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult>(
119+
Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult>> lambda)
120+
{
121+
return lambda;
122+
}
123+
124+
/// <inheritdoc cref="Expr{TResult}"/>
125+
[Pure, ExcludeFromCodeCoverage]
126+
public static Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult>> Expr<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult>(
127+
Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult>> lambda)
128+
{
129+
return lambda;
130+
}
131+
132+
/// <inheritdoc cref="Expr{TResult}"/>
133+
[Pure, ExcludeFromCodeCoverage]
134+
public static Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult>> Expr<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult>(
135+
Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult>> lambda)
136+
{
137+
return lambda;
138+
}
139+
140+
/// <inheritdoc cref="Expr{TResult}"/>
141+
[Pure, ExcludeFromCodeCoverage]
142+
public static Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult>> Expr<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult>(
143+
Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult>> lambda)
144+
{
145+
return lambda;
146+
}
147+
148+
/// <inheritdoc cref="Expr{TResult}"/>
149+
[Pure, ExcludeFromCodeCoverage]
150+
public static Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult>> Expr<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult>(
151+
Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult>> lambda)
152+
{
153+
return lambda;
154+
}
155+
156+
#pragma warning restore S2436, S107
67157
}
68158
}

ZySharp.Metaprogramming/Lambda.Func.cs

Lines changed: 91 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ namespace ZySharp.Metaprogramming
66
{
77
public static partial class Lambda
88
{
9+
#pragma warning disable S2436, S107
10+
911
/// <summary>
1012
/// Returns the given anonymous method as a lambda function delegate.
1113
/// </summary>
@@ -62,6 +64,94 @@ public static Func<T1, T2, T3, T4, T5, TResult> Func<T1, T2, T3, T4, T5, TResult
6264
return lambda;
6365
}
6466

65-
// TODO: T16
67+
/// <inheritdoc cref="Func{TResult}"/>
68+
[Pure, ExcludeFromCodeCoverage]
69+
public static Func<T1, T2, T3, T4, T5, T6, TResult> Func<T1, T2, T3, T4, T5, T6, TResult>(
70+
Func<T1, T2, T3, T4, T5, T6, TResult> lambda)
71+
{
72+
return lambda;
73+
}
74+
75+
/// <inheritdoc cref="Func{TResult}"/>
76+
[Pure, ExcludeFromCodeCoverage]
77+
public static Func<T1, T2, T3, T4, T5, T6, T7, TResult> Func<T1, T2, T3, T4, T5, T6, T7, TResult>(
78+
Func<T1, T2, T3, T4, T5, T6, T7, TResult> lambda)
79+
{
80+
return lambda;
81+
}
82+
83+
/// <inheritdoc cref="Func{TResult}"/>
84+
[Pure, ExcludeFromCodeCoverage]
85+
public static Func<T1, T2, T3, T4, T5, T6, T7, T8, TResult> Func<T1, T2, T3, T4, T5, T6, T7, T8, TResult>(
86+
Func<T1, T2, T3, T4, T5, T6, T7, T8, TResult> lambda)
87+
{
88+
return lambda;
89+
}
90+
91+
/// <inheritdoc cref="Func{TResult}"/>
92+
[Pure, ExcludeFromCodeCoverage]
93+
public static Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult> Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult>(
94+
Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult> lambda)
95+
{
96+
return lambda;
97+
}
98+
99+
/// <inheritdoc cref="Func{TResult}"/>
100+
[Pure, ExcludeFromCodeCoverage]
101+
public static Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult> Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult>(
102+
Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult> lambda)
103+
{
104+
return lambda;
105+
}
106+
107+
/// <inheritdoc cref="Func{TResult}"/>
108+
[Pure, ExcludeFromCodeCoverage]
109+
public static Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult> Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult>(
110+
Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult> lambda)
111+
{
112+
return lambda;
113+
}
114+
115+
/// <inheritdoc cref="Func{TResult}"/>
116+
[Pure, ExcludeFromCodeCoverage]
117+
public static Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult> Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult>(
118+
Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult> lambda)
119+
{
120+
return lambda;
121+
}
122+
123+
/// <inheritdoc cref="Func{TResult}"/>
124+
[Pure, ExcludeFromCodeCoverage]
125+
public static Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult> Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult>(
126+
Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult> lambda)
127+
{
128+
return lambda;
129+
}
130+
131+
/// <inheritdoc cref="Func{TResult}"/>
132+
[Pure, ExcludeFromCodeCoverage]
133+
public static Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult> Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult>(
134+
Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult> lambda)
135+
{
136+
return lambda;
137+
}
138+
139+
/// <inheritdoc cref="Func{TResult}"/>
140+
[Pure, ExcludeFromCodeCoverage]
141+
public static Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult> Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult>(
142+
Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult> lambda)
143+
{
144+
return lambda;
145+
}
146+
147+
/// <inheritdoc cref="Func{TResult}"/>
148+
[Pure, ExcludeFromCodeCoverage]
149+
public static Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult> Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult>(
150+
Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult> lambda)
151+
{
152+
return lambda;
153+
}
154+
155+
#pragma warning restore S2436, S107
66156
}
67157
}

version.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"$schema": "https://raw.githubusercontent.com/dotnet/Nerdbank.GitVersioning/master/src/NerdBank.GitVersioning/version.schema.json",
3-
"version": "1.1",
3+
"version": "1.2",
44
"publicReleaseRefSpec": [
55
"^refs/heads/master$",
66
"^refs/heads/v\\d+(?:\\.\\d+)?$"

0 commit comments

Comments
 (0)