340 {
341 int num =
input.IndexOf(
'.');
342 if (num < 0)
343 {
344 if (throwOnFailure)
345 {
347 }
348 return null;
349 }
350 int num2 = -1;
351 int num3 =
input.Slice(num + 1).IndexOf(
'.');
352 if (num3 != -1)
353 {
354 num3 += num + 1;
355 num2 =
input.Slice(num3 + 1).IndexOf(
'.');
356 if (num2 != -1)
357 {
358 num2 += num3 + 1;
359 if (
input.Slice(num2 + 1).Contains(
'.'))
360 {
361 if (throwOnFailure)
362 {
364 }
365 return null;
366 }
367 }
368 }
370 {
371 return null;
372 }
373 int parsedComponent2;
374 if (num3 != -1)
375 {
376 if (!
TryParseComponent(
input.Slice(num + 1, num3 - num - 1),
"input", throwOnFailure, out parsedComponent2))
377 {
378 return null;
379 }
380 int parsedComponent3;
381 if (num2 != -1)
382 {
384 {
385 return null;
386 }
387 return new Version(parsedComponent, parsedComponent2, parsedComponent3, parsedComponent4);
388 }
390 {
391 return null;
392 }
393 return new Version(parsedComponent, parsedComponent2, parsedComponent3);
394 }
396 {
397 return null;
398 }
399 return new Version(parsedComponent, parsedComponent2);
400 }
static bool TryParseComponent(ReadOnlySpan< char > component, string componentName, bool throwOnFailure, out int parsedComponent)