TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.75K subscribers
Post #2718 2.74K
День 2252. #ЗаметкиНаПолях
Пример Сопоставления по Шаблону

Сегодня поделюсь с вами фрагментом кода от Жеральда Барре (aka Meziantou), в котором используется сопоставление по шаблону, а также метод SplitAny, использующий SearchValues<char>.

В примере ниже приведён простой сопоставитель версий, который проверяет, удовлетворяет ли версия (version) ограничениям (constraints). Ограничения — это строка, которая может содержать несколько ограничений, разделённых , или ;. Каждое ограничение может быть одной версией или диапазоном версий. В свою очередь, диапазон может выглядеть как >1.0.0, >=1.0.0, <1.0.0, <=1.0.0, =1.0.0, или 1.0.0.
using System.Buffers;

var version = "1.5.0";
var constraints = ">=1.0.0,<2.0.0";

Console.WriteLine(
VersionMatcher.IsValid(version, constraints));

class VersionMatcher
{
private static readonly SearchValues<char>
SplitChars = SearchValues.Create([',', ';']);

public static bool IsValid(
ReadOnlySpan<char> version,
ReadOnlySpan<char> constraints)
{
var parsed = Version.Parse(version);
foreach (var partRange in
constraints.SplitAny(SplitChars))
{
var part = constraints[partRange].Trim();
if (part.IsEmpty)
continue;

var satisfy = part switch
{
['=', .. var r] => parsed == Version.Parse(r),
['<', '=', .. var r] => parsed <= Version.Parse(r),
['<', .. var r] => parsed < Version.Parse(r),
['>', '=', .. var r] => parsed >= Version.Parse(r),
['>', .. var r] => parsed > Version.Parse(r),
_ => parsed == Version.Parse(part),
};

if (!satisfy)
return false;
}

return true;
}
}


Источник: https://www.meziantou.net/nice-example-of-csharp-list-pattern-matching.htm
  • 👍 10
  • 👎 2
More from @netdeveloperdiary
  1. Oct 5, 2026День 2805. #ЧтоНовенького #NET11 Аргументы в Выражениях Коллекций в C#15 В C#15 реализован…
  2. Oct 4, 2026День 2804. #ВопросыНаСобеседовании Марк Прайс предложил свой набор из 60 вопросов (как тех…
  3. Oct 3, 2026Post #3360
  4. Oct 3, 2026День 2803. #Оффтоп Чем Заняться, Пока Работают Агенты? У VS Code Есть Ответ Сейчас большую…
  5. Oct 2, 2026День 2802. #Карьера #Юмор Секреты Программирования, Известные Только Легендам Ещё один пос…
  6. Oct 1, 2026Post #3357
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →