TG Telegram Group & Channel
.NET Разработчик | United States America (US)
Create: Update:

День 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

День 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


>>Click here to continue<<

.NET Разработчик




Share with your best friend
VIEW MORE

United States America Popular Telegram Group (US)