Skip to content

Commit c2c737b

Browse files
authored
[net9.0] Use [GeneratedRegex] props (#3870)
1 parent bcd623a commit c2c737b

File tree

4 files changed

+142
-69
lines changed

4 files changed

+142
-69
lines changed

src/Sentry/BuiltInSystemDiagnosticsMeters.cs

+84-24
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,15 @@ public static partial class BuiltInSystemDiagnosticsMeters
2424
/// <summary>
2525
/// Matches the built-in Microsoft.AspNetCore.Hosting metrics
2626
/// </summary>
27-
#if NET8_0_OR_GREATER
27+
#if NET9_0_OR_GREATER
28+
public static readonly StringOrRegex MicrosoftAspNetCoreHosting = MicrosoftAspNetCoreHostingRegex;
29+
30+
[GeneratedRegex(MicrosoftAspNetCoreHostingPattern)]
31+
private static partial Regex MicrosoftAspNetCoreHostingRegex { get; }
32+
#elif NET8_0
2833
public static readonly StringOrRegex MicrosoftAspNetCoreHosting = MicrosoftAspNetCoreHostingRegex();
2934

30-
[GeneratedRegex(MicrosoftAspNetCoreHostingPattern, RegexOptions.Compiled)]
35+
[GeneratedRegex(MicrosoftAspNetCoreHostingPattern)]
3136
private static partial Regex MicrosoftAspNetCoreHostingRegex();
3237
#else
3338
public static readonly StringOrRegex MicrosoftAspNetCoreHosting = new Regex(MicrosoftAspNetCoreHostingPattern, RegexOptions.Compiled);
@@ -36,10 +41,15 @@ public static partial class BuiltInSystemDiagnosticsMeters
3641
/// <summary>
3742
/// Matches the built-in Microsoft.AspNetCore.Routing metrics
3843
/// </summary>
39-
#if NET8_0_OR_GREATER
44+
#if NET9_0_OR_GREATER
45+
public static readonly StringOrRegex MicrosoftAspNetCoreRouting = MicrosoftAspNetCoreRoutingRegex;
46+
47+
[GeneratedRegex(MicrosoftAspNetCoreRoutingPattern)]
48+
private static partial Regex MicrosoftAspNetCoreRoutingRegex { get; }
49+
#elif NET8_0
4050
public static readonly StringOrRegex MicrosoftAspNetCoreRouting = MicrosoftAspNetCoreRoutingRegex();
4151

42-
[GeneratedRegex(MicrosoftAspNetCoreRoutingPattern, RegexOptions.Compiled)]
52+
[GeneratedRegex(MicrosoftAspNetCoreRoutingPattern)]
4353
private static partial Regex MicrosoftAspNetCoreRoutingRegex();
4454
#else
4555
public static readonly StringOrRegex MicrosoftAspNetCoreRouting = new Regex(MicrosoftAspNetCoreRoutingPattern, RegexOptions.Compiled);
@@ -48,10 +58,15 @@ public static partial class BuiltInSystemDiagnosticsMeters
4858
/// <summary>
4959
/// Matches the built-in Microsoft.AspNetCore.Diagnostics metrics
5060
/// </summary>
51-
#if NET8_0_OR_GREATER
61+
#if NET9_0_OR_GREATER
62+
public static readonly StringOrRegex MicrosoftAspNetCoreDiagnostics = MicrosoftAspNetCoreDiagnosticsRegex;
63+
64+
[GeneratedRegex(MicrosoftAspNetCoreDiagnosticsPattern)]
65+
private static partial Regex MicrosoftAspNetCoreDiagnosticsRegex { get; }
66+
#elif NET8_0
5267
public static readonly StringOrRegex MicrosoftAspNetCoreDiagnostics = MicrosoftAspNetCoreDiagnosticsRegex();
5368

54-
[GeneratedRegex(MicrosoftAspNetCoreDiagnosticsPattern, RegexOptions.Compiled)]
69+
[GeneratedRegex(MicrosoftAspNetCoreDiagnosticsPattern)]
5570
private static partial Regex MicrosoftAspNetCoreDiagnosticsRegex();
5671
#else
5772
public static readonly StringOrRegex MicrosoftAspNetCoreDiagnostics = new Regex(MicrosoftAspNetCoreDiagnosticsPattern, RegexOptions.Compiled);
@@ -60,10 +75,15 @@ public static partial class BuiltInSystemDiagnosticsMeters
6075
/// <summary>
6176
/// Matches the built-in Microsoft.AspNetCore.RateLimiting metrics
6277
/// </summary>
63-
#if NET8_0_OR_GREATER
78+
#if NET9_0_OR_GREATER
79+
public static readonly StringOrRegex MicrosoftAspNetCoreRateLimiting = MicrosoftAspNetCoreRateLimitingRegex;
80+
81+
[GeneratedRegex(MicrosoftAspNetCoreRateLimitingPattern)]
82+
private static partial Regex MicrosoftAspNetCoreRateLimitingRegex { get; }
83+
#elif NET8_0
6484
public static readonly StringOrRegex MicrosoftAspNetCoreRateLimiting = MicrosoftAspNetCoreRateLimitingRegex();
6585

66-
[GeneratedRegex(MicrosoftAspNetCoreRateLimitingPattern, RegexOptions.Compiled)]
86+
[GeneratedRegex(MicrosoftAspNetCoreRateLimitingPattern)]
6787
private static partial Regex MicrosoftAspNetCoreRateLimitingRegex();
6888
#else
6989
public static readonly StringOrRegex MicrosoftAspNetCoreRateLimiting = new Regex(MicrosoftAspNetCoreRateLimitingPattern, RegexOptions.Compiled);
@@ -72,10 +92,15 @@ public static partial class BuiltInSystemDiagnosticsMeters
7292
/// <summary>
7393
/// Matches the built-in Microsoft.AspNetCore.HeaderParsing metrics
7494
/// </summary>
75-
#if NET8_0_OR_GREATER
95+
#if NET9_0_OR_GREATER
96+
public static readonly StringOrRegex MicrosoftAspNetCoreHeaderParsing = MicrosoftAspNetCoreHeaderParsingRegex;
97+
98+
[GeneratedRegex(MicrosoftAspNetCoreHeaderParsingPattern)]
99+
private static partial Regex MicrosoftAspNetCoreHeaderParsingRegex { get; }
100+
#elif NET8_0
76101
public static readonly StringOrRegex MicrosoftAspNetCoreHeaderParsing = MicrosoftAspNetCoreHeaderParsingRegex();
77102

78-
[GeneratedRegex(MicrosoftAspNetCoreHeaderParsingPattern, RegexOptions.Compiled)]
103+
[GeneratedRegex(MicrosoftAspNetCoreHeaderParsingPattern)]
79104
private static partial Regex MicrosoftAspNetCoreHeaderParsingRegex();
80105
#else
81106
public static readonly StringOrRegex MicrosoftAspNetCoreHeaderParsing = new Regex(MicrosoftAspNetCoreHeaderParsingPattern, RegexOptions.Compiled);
@@ -84,10 +109,15 @@ public static partial class BuiltInSystemDiagnosticsMeters
84109
/// <summary>
85110
/// Matches the built-in Microsoft.AspNetCore.Server.Kestrel metrics
86111
/// </summary>
87-
#if NET8_0_OR_GREATER
112+
#if NET9_0_OR_GREATER
113+
public static readonly StringOrRegex MicrosoftAspNetCoreServerKestrel = MicrosoftAspNetCoreServerKestrelRegex;
114+
115+
[GeneratedRegex(MicrosoftAspNetCoreServerKestrelPattern)]
116+
private static partial Regex MicrosoftAspNetCoreServerKestrelRegex { get; }
117+
#elif NET8_0
88118
public static readonly StringOrRegex MicrosoftAspNetCoreServerKestrel = MicrosoftAspNetCoreServerKestrelRegex();
89119

90-
[GeneratedRegex(MicrosoftAspNetCoreServerKestrelPattern, RegexOptions.Compiled)]
120+
[GeneratedRegex(MicrosoftAspNetCoreServerKestrelPattern)]
91121
private static partial Regex MicrosoftAspNetCoreServerKestrelRegex();
92122
#else
93123
public static readonly StringOrRegex MicrosoftAspNetCoreServerKestrel = new Regex(MicrosoftAspNetCoreServerKestrelPattern, RegexOptions.Compiled);
@@ -96,10 +126,15 @@ public static partial class BuiltInSystemDiagnosticsMeters
96126
/// <summary>
97127
/// Matches the built-in Microsoft.AspNetCore.Http.Connections metrics
98128
/// </summary>
99-
#if NET8_0_OR_GREATER
129+
#if NET9_0_OR_GREATER
130+
public static readonly StringOrRegex MicrosoftAspNetCoreHttpConnections = MicrosoftAspNetCoreHttpConnectionsRegex;
131+
132+
[GeneratedRegex(MicrosoftAspNetCoreHttpConnectionsPattern)]
133+
private static partial Regex MicrosoftAspNetCoreHttpConnectionsRegex { get; }
134+
#elif NET8_0
100135
public static readonly StringOrRegex MicrosoftAspNetCoreHttpConnections = MicrosoftAspNetCoreHttpConnectionsRegex();
101136

102-
[GeneratedRegex(MicrosoftAspNetCoreHttpConnectionsPattern, RegexOptions.Compiled)]
137+
[GeneratedRegex(MicrosoftAspNetCoreHttpConnectionsPattern)]
103138
private static partial Regex MicrosoftAspNetCoreHttpConnectionsRegex();
104139
#else
105140
public static readonly StringOrRegex MicrosoftAspNetCoreHttpConnections = new Regex(MicrosoftAspNetCoreHttpConnectionsPattern, RegexOptions.Compiled);
@@ -108,10 +143,15 @@ public static partial class BuiltInSystemDiagnosticsMeters
108143
/// <summary>
109144
/// Matches the built-in Microsoft.Extensions.Diagnostics.HealthChecks metrics
110145
/// </summary>
111-
#if NET8_0_OR_GREATER
146+
#if NET9_0_OR_GREATER
147+
public static readonly StringOrRegex MicrosoftExtensionsDiagnosticsHealthChecks = MicrosoftExtensionsDiagnosticsHealthChecksRegex;
148+
149+
[GeneratedRegex(MicrosoftExtensionsDiagnosticsHealthChecksPattern)]
150+
private static partial Regex MicrosoftExtensionsDiagnosticsHealthChecksRegex { get; }
151+
#elif NET8_0
112152
public static readonly StringOrRegex MicrosoftExtensionsDiagnosticsHealthChecks = MicrosoftExtensionsDiagnosticsHealthChecksRegex();
113153

114-
[GeneratedRegex(MicrosoftExtensionsDiagnosticsHealthChecksPattern, RegexOptions.Compiled)]
154+
[GeneratedRegex(MicrosoftExtensionsDiagnosticsHealthChecksPattern)]
115155
private static partial Regex MicrosoftExtensionsDiagnosticsHealthChecksRegex();
116156
#else
117157
public static readonly StringOrRegex MicrosoftExtensionsDiagnosticsHealthChecks = new Regex(MicrosoftExtensionsDiagnosticsHealthChecksPattern, RegexOptions.Compiled);
@@ -120,10 +160,15 @@ public static partial class BuiltInSystemDiagnosticsMeters
120160
/// <summary>
121161
/// Matches the built-in Microsoft.Extensions.Diagnostics.ResourceMonitoring metrics
122162
/// </summary>
123-
#if NET8_0_OR_GREATER
163+
#if NET9_0_OR_GREATER
164+
public static readonly StringOrRegex MicrosoftExtensionsDiagnosticsResourceMonitoring = MicrosoftExtensionsDiagnosticsResourceMonitoringRegex;
165+
166+
[GeneratedRegex(MicrosoftExtensionsDiagnosticsResourceMonitoringPattern)]
167+
private static partial Regex MicrosoftExtensionsDiagnosticsResourceMonitoringRegex { get; }
168+
#elif NET8_0
124169
public static readonly StringOrRegex MicrosoftExtensionsDiagnosticsResourceMonitoring = MicrosoftExtensionsDiagnosticsResourceMonitoringRegex();
125170

126-
[GeneratedRegex(MicrosoftExtensionsDiagnosticsResourceMonitoringPattern, RegexOptions.Compiled)]
171+
[GeneratedRegex(MicrosoftExtensionsDiagnosticsResourceMonitoringPattern)]
127172
private static partial Regex MicrosoftExtensionsDiagnosticsResourceMonitoringRegex();
128173
#else
129174
public static readonly StringOrRegex MicrosoftExtensionsDiagnosticsResourceMonitoring = new Regex(MicrosoftExtensionsDiagnosticsResourceMonitoringPattern, RegexOptions.Compiled);
@@ -132,10 +177,15 @@ public static partial class BuiltInSystemDiagnosticsMeters
132177
/// <summary>
133178
/// Matches the built-in System.Net.NameResolution metrics
134179
/// </summary>
135-
#if NET8_0_OR_GREATER
180+
#if NET9_0_OR_GREATER
181+
public static readonly StringOrRegex OpenTelemetryInstrumentationRuntime = OpenTelemetryInstrumentationRuntimeRegex;
182+
183+
[GeneratedRegex(OpenTelemetryInstrumentationRuntimePattern)]
184+
private static partial Regex OpenTelemetryInstrumentationRuntimeRegex { get; }
185+
#elif NET8_0
136186
public static readonly StringOrRegex OpenTelemetryInstrumentationRuntime = OpenTelemetryInstrumentationRuntimeRegex();
137187

138-
[GeneratedRegex(OpenTelemetryInstrumentationRuntimePattern, RegexOptions.Compiled)]
188+
[GeneratedRegex(OpenTelemetryInstrumentationRuntimePattern)]
139189
private static partial Regex OpenTelemetryInstrumentationRuntimeRegex();
140190
#else
141191
public static readonly StringOrRegex OpenTelemetryInstrumentationRuntime = new Regex(OpenTelemetryInstrumentationRuntimePattern, RegexOptions.Compiled);
@@ -144,10 +194,15 @@ public static partial class BuiltInSystemDiagnosticsMeters
144194
/// <summary>
145195
/// Matches the built-in System.Net.NameResolution metrics
146196
/// </summary>
147-
#if NET8_0_OR_GREATER
197+
#if NET9_0_OR_GREATER
198+
public static readonly StringOrRegex SystemNetNameResolution = SystemNetNameResolutionRegex;
199+
200+
[GeneratedRegex(SystemNetNameResolutionPattern)]
201+
private static partial Regex SystemNetNameResolutionRegex { get; }
202+
#elif NET8_0
148203
public static readonly StringOrRegex SystemNetNameResolution = SystemNetNameResolutionRegex();
149204

150-
[GeneratedRegex(SystemNetNameResolutionPattern, RegexOptions.Compiled)]
205+
[GeneratedRegex(SystemNetNameResolutionPattern)]
151206
private static partial Regex SystemNetNameResolutionRegex();
152207
#else
153208
public static readonly StringOrRegex SystemNetNameResolution = new Regex(SystemNetNameResolutionPattern, RegexOptions.Compiled);
@@ -156,10 +211,15 @@ public static partial class BuiltInSystemDiagnosticsMeters
156211
/// <summary>
157212
/// Matches the built-in <see cref="System.Net.Http"/> metrics
158213
/// </summary>
159-
#if NET8_0_OR_GREATER
214+
#if NET9_0_OR_GREATER
215+
public static readonly StringOrRegex SystemNetHttp = SystemNetHttpRegex;
216+
217+
[GeneratedRegex(SystemNetHttpPattern)]
218+
private static partial Regex SystemNetHttpRegex { get; }
219+
#elif NET8_0
160220
public static readonly StringOrRegex SystemNetHttp = SystemNetHttpRegex();
161221

162-
[GeneratedRegex(SystemNetHttpPattern, RegexOptions.Compiled)]
222+
[GeneratedRegex(SystemNetHttpPattern)]
163223
private static partial Regex SystemNetHttpRegex();
164224
#else
165225
public static readonly StringOrRegex SystemNetHttp = new Regex(SystemNetHttpPattern, RegexOptions.Compiled);

src/Sentry/Internal/OriginHelper.cs

+8-5
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,15 @@ internal static partial class OriginHelper
55
internal const string Manual = "manual";
66
private const string ValidOriginPattern = @"^(auto|manual)(\.[\w]+){0,3}$";
77

8-
#if NET8_0_OR_GREATER
9-
[GeneratedRegex(ValidOriginPattern, RegexOptions.Compiled)]
10-
private static partial Regex ValidOriginRegEx();
11-
private static readonly Regex ValidOrigin = ValidOriginRegEx();
8+
#if NET9_0_OR_GREATER
9+
[GeneratedRegex(ValidOriginPattern)]
10+
private static partial Regex ValidOrigin { get; }
11+
#elif NET8_0
12+
[GeneratedRegex(ValidOriginPattern)]
13+
private static partial Regex ValidOriginRegex();
14+
private static readonly Regex ValidOrigin = ValidOriginRegex();
1215
#else
13-
private static readonly Regex ValidOrigin = new (ValidOriginPattern, RegexOptions.Compiled);
16+
private static readonly Regex ValidOrigin = new(ValidOriginPattern, RegexOptions.Compiled);
1417
#endif
1518

1619
public static bool IsValidOrigin(string? value) => value == null || ValidOrigin.IsMatch(value);

src/Sentry/MetricHelper.cs

+34-23
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,40 @@ internal static partial class MetricHelper
1818
private static readonly DateTimeOffset UnixEpoch = new DateTimeOffset(1970, 1, 1, 0, 0, 0, 0, TimeSpan.Zero);
1919
#endif
2020

21+
#if NET9_0_OR_GREATER
22+
[GeneratedRegex(InvalidMetricKeyOrNameCharactersPattern)]
23+
private static partial Regex InvalidMetricKeyOrNameCharacters { get; }
24+
25+
[GeneratedRegex(InvalidTagKeyCharactersPattern)]
26+
private static partial Regex InvalidTagKeyCharacters { get; }
27+
28+
[GeneratedRegex(InvalidMetricUnitCharactersPattern)]
29+
private static partial Regex InvalidMetricUnitCharacters { get; }
30+
#elif NET8_0
31+
[GeneratedRegex(InvalidMetricKeyOrNameCharactersPattern)]
32+
private static partial Regex InvalidMetricKeyOrNameCharacters();
33+
34+
[GeneratedRegex(InvalidTagKeyCharactersPattern)]
35+
private static partial Regex InvalidTagKeyCharacters();
36+
37+
[GeneratedRegex(InvalidMetricUnitCharactersPattern)]
38+
private static partial Regex InvalidMetricUnitCharacters();
39+
#else
40+
private static readonly Regex InvalidMetricKeyOrNameCharacters = new(InvalidMetricKeyOrNameCharactersPattern, RegexOptions.Compiled);
41+
private static readonly Regex InvalidTagKeyCharacters = new(InvalidTagKeyCharactersPattern, RegexOptions.Compiled);
42+
private static readonly Regex InvalidMetricUnitCharacters = new(InvalidMetricUnitCharactersPattern, RegexOptions.Compiled);
43+
#endif
44+
45+
#if NET8_0
46+
internal static string SanitizeMetricKeyOrName(string input) => InvalidMetricKeyOrNameCharacters().Replace(input, "_");
47+
internal static string SanitizeTagKey(string input) => InvalidTagKeyCharacters().Replace(input, "");
48+
internal static string SanitizeMetricUnit(string input) => InvalidMetricUnitCharacters().Replace(input, "");
49+
#else
50+
internal static string SanitizeMetricKeyOrName(string input) => InvalidMetricKeyOrNameCharacters.Replace(input, "_");
51+
internal static string SanitizeTagKey(string input) => InvalidTagKeyCharacters.Replace(input, "");
52+
internal static string SanitizeMetricUnit(string input) => InvalidMetricUnitCharacters.Replace(input, "");
53+
#endif
54+
2155
internal static long GetDayBucketKey(this DateTimeOffset timestamp)
2256
{
2357
var utc = timestamp.ToUniversalTime();
@@ -43,29 +77,6 @@ internal static DateTimeOffset GetCutoff() => DateTimeOffset.UtcNow
4377
.Subtract(TimeSpan.FromSeconds(RollupInSeconds))
4478
.Subtract(TimeSpan.FromMilliseconds(FlushShift));
4579

46-
#if NET7_0_OR_GREATER
47-
[GeneratedRegex(InvalidMetricKeyOrNameCharactersPattern, RegexOptions.Compiled)]
48-
private static partial Regex InvalidMetricKeyOrNameCharacters();
49-
internal static string SanitizeMetricKeyOrName(string input) => InvalidMetricKeyOrNameCharacters().Replace(input, "_");
50-
51-
[GeneratedRegex(InvalidTagKeyCharactersPattern, RegexOptions.Compiled)]
52-
private static partial Regex InvalidTagKeyCharacters();
53-
internal static string SanitizeTagKey(string input) => InvalidTagKeyCharacters().Replace(input, "");
54-
55-
[GeneratedRegex(InvalidMetricUnitCharactersPattern, RegexOptions.Compiled)]
56-
private static partial Regex InvalidMetricUnitCharacters();
57-
internal static string SanitizeMetricUnit(string input) => InvalidMetricUnitCharacters().Replace(input, "");
58-
#else
59-
private static readonly Regex InvalidMetricKeyOrNameCharacters = new(InvalidMetricKeyOrNameCharactersPattern, RegexOptions.Compiled);
60-
internal static string SanitizeMetricKeyOrName(string input) => InvalidMetricKeyOrNameCharacters.Replace(input, "_");
61-
62-
private static readonly Regex InvalidTagKeyCharacters = new(InvalidTagKeyCharactersPattern, RegexOptions.Compiled);
63-
internal static string SanitizeTagKey(string input) => InvalidTagKeyCharacters.Replace(input, "");
64-
65-
private static readonly Regex InvalidMetricUnitCharacters = new(InvalidMetricUnitCharactersPattern, RegexOptions.Compiled);
66-
internal static string SanitizeMetricUnit(string input) => InvalidMetricUnitCharacters.Replace(input, "");
67-
#endif
68-
6980
private static readonly Lazy<KeyValuePair<string, string>[]> LazyTagValueReplacements = new(() =>
7081
[
7182
new KeyValuePair<string, string>("\n", @"\n"),

src/Sentry/SentryMonitorOptions.cs

+16-17
Original file line numberDiff line numberDiff line change
@@ -51,30 +51,29 @@ public enum SentryMonitorInterval
5151
/// </summary>
5252
public partial class SentryMonitorOptions : ISentryJsonSerializable
5353
{
54-
private SentryMonitorScheduleType _type = SentryMonitorScheduleType.None;
55-
private string? _crontab;
56-
private int? _interval;
57-
private SentryMonitorInterval? _unit;
58-
5954
// Breakdown of the validation
6055
// ^(\*|([0-5]?\d)) Minute 0 - 59
6156
// (\s+)(\*|([01]?\d|2[0-3])) Hour 0 - 23
6257
// (\s+)(\*|([1-9]|[12]\d|3[01])) Day 1 - 31
6358
// (\s+)(\*|([1-9]|1[0-2])) Month 1 - 12
6459
// (\s+)(\*|([0-7])) Weekday 0 - 7
6560
// $ End of string
66-
#if NET7_0_OR_GREATER
67-
[GeneratedRegex(@"^(\*|([0-5]?\d))(\s+)(\*|([01]?\d|2[0-3]))(\s+)(\*|([1-9]|[12]\d|3[01]))(\s+)(\*|([1-9]|1[0-2]))(\s+)(\*|([0-7]))$", RegexOptions.IgnoreCase)]
68-
private static partial Regex CrontabValidation();
69-
#else
70-
private static Regex? CrontabValidationInstance;
61+
private const string ValidCrontabPattern = @"^(\*|([0-5]?\d))(\s+)(\*|([01]?\d|2[0-3]))(\s+)(\*|([1-9]|[12]\d|3[01]))(\s+)(\*|([1-9]|1[0-2]))(\s+)(\*|([0-7]))$";
7162

72-
private static Regex CrontabValidation()
73-
{
74-
return CrontabValidationInstance ??= new Regex(
75-
@"^(\*|([0-5]?\d))(\s+)(\*|([01]?\d|2[0-3]))(\s+)(\*|([1-9]|[12]\d|3[01]))(\s+)(\*|([1-9]|1[0-2]))(\s+)(\*|([0-7]))$",
76-
RegexOptions.Compiled | RegexOptions.CultureInvariant);
77-
}
63+
private SentryMonitorScheduleType _type = SentryMonitorScheduleType.None;
64+
private string? _crontab;
65+
private int? _interval;
66+
private SentryMonitorInterval? _unit;
67+
68+
#if NET9_0_OR_GREATER
69+
[GeneratedRegex(ValidCrontabPattern, RegexOptions.IgnoreCase)]
70+
private static partial Regex ValidCrontab { get; }
71+
#elif NET8_0
72+
[GeneratedRegex(ValidCrontabPattern, RegexOptions.IgnoreCase)]
73+
private static partial Regex ValidCrontabRegex();
74+
private static readonly Regex ValidCrontab = ValidCrontabRegex();
75+
#else
76+
private static readonly Regex ValidCrontab = new(ValidCrontabPattern, RegexOptions.Compiled | RegexOptions.CultureInvariant);
7877
#endif
7978

8079
/// <summary>
@@ -88,7 +87,7 @@ public void Interval(string crontab)
8887
throw new ArgumentException("You tried to set the interval twice. The Check-Ins interval is supposed to be set only once.");
8988
}
9089

91-
if (!CrontabValidation().IsMatch(crontab))
90+
if (!ValidCrontab.IsMatch(crontab))
9291
{
9392
throw new ArgumentException("The provided crontab does not match the expected format of '* * * * *' " +
9493
"translating to 'minute', 'hour', 'day of the month', 'month', and 'day of the week'.");

0 commit comments

Comments
 (0)