/
dOJer113
/
Insect
Обзор
Документация
Войти
/
dOJer113
/
Insect
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
server
insects/InsectValidator.cs
48 строк
2 KB
aleks
Lab 6
14 дек 2025, 19:25
14 дек 2025, 19:25
2ed295a
Код
Авторство
О чём код?
using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; namespace insects; /// <summary> /// Проверка насекомых по аннотациям и дополнительным правилам. /// </summary> public static class InsectValidator { private static readonly HashSet<string> AllowedTypes = new(StringComparer.OrdinalIgnoreCase) { nameof(Ladybug), nameof(Necrophages) }; public static List<string> Validate(Insect insect, bool requireId) { var context = new ValidationContext(insect); var validationResults = new List<ValidationResult>(); _ = Validator.TryValidateObject(insect, context, validationResults, true); if (requireId && insect.Id <= 0) { validationResults.Add(new ValidationResult("ID должен быть положительным.")); } if (!string.Equals(insect.TypeName, insect.GetType().Name, StringComparison.Ordinal)) { validationResults.Add(new ValidationResult("TypeName не совпадает с типом объекта.")); } if (!AllowedTypes.Contains(insect.TypeName)) { validationResults.Add(new ValidationResult($"Тип насекомого '{insect.TypeName}' не поддерживается.")); } if (insect is Necrophages necro && necro.StageOfSuccession is < 1 or > 5) { validationResults.Add(new ValidationResult("Стадия сукцессии должна быть 1..5.")); } return validationResults .Select(vr => vr.ErrorMessage ?? "Ошибка валидации насекомого") .ToList(); } }