v1.1.1
Roman v1.1.1
Релиз добавляет строгий режим парсинга, исправляет два бага и существенно обновляет документацию. Под капотом — переезд на namespace RomanNumerals и приведённый в порядок CI.
NuGet
- Пакет: Roman
- Страница на NuGet: Roman
- Описание пакета теперь рендерится прямо на NuGet (встроенный README)
Совместимость
- Target Framework: net9.0
- Язык: C# 13
Новое
- Строгий режим парсинга через перечисление RomanStyle (Lenient / Strict) — по аналогии с int.Parse(string, NumberStyles):
Roman.Parse("IV", RomanStyle.Strict); // OK → 4
Roman.Parse("IIII", RomanStyle.Strict); // FormatException: не каноническая запись
Roman.TryParse("IIII", RomanStyle.Strict, out var r); // false- Новые перегрузки Parse(string, RomanStyle) и TryParse(string, RomanStyle, out Roman?). Поведение по умолчанию (лояльный разбор) не изменилось — обратная совместимость API сохранена.
Исправления
implicit operator int(Roman)бросалNullReferenceExceptionнаnull— теперь кидает понятныйArgumentNullException.ToInt(string)переполнял int-аккумулятор на сверхдлинных строках и мог молча вернуть неверное значение в диапазоне 1–3999 вместо исключения — аккумулятор переведён на long.
Улучшения
- Устранено дублирование таблицы «символ → значение»: Map стал единственным источником истины, парсер выводит данные из него.
- Упрощена обработка исключений в
TryParse(string)(один catch вместо избыточных двух). - Тестовый набор расширен до 153 тестов (было 138), включая строгий режим и регрессию на переполнение.
Документация
- README полностью переписан в open-source стиле.
- Добавлены две языковые версии: English и Русский с переключателем языка.
- Бейджи приведены в соответствие с проектом (
.NET 9/C# 13).
Важно при обновлении
- Изменён namespace:
Roman→RomanNumerals. Имя типа осталосьRoman. Обновите using:
using RomanNumerals;
var roman = new Roman("X");Что внутри
- Библиотека RomanNumerals (PackageId остался Roman)
- Набор тестов RomanNumerals.Tests (MSTest)
Установка
dotnet add package Roman --version 1.1.1
Полный список изменений: v1.0.0...v1.1.1