Yuebon.NetCore/Yuebon.Commons/Core/Dtos/InputDtoValidateExtensions.cs
(开头部分) 2KB这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Reflection;
using System.Text;
using Yuebon.Commons.Data;
using Yuebon.Commons.Extensions;
namespace Yuebon.Commons.Dtos
{
/// <summary>
/// <see cref="IInputDto{TKey}"/>验证扩展
/// </summary>
public static class InputDtoValidateExtensions
{
private static readonly ConcurrentDictionary<Type, ConcurrentDictionary<PropertyInfo, ValidationAttribute[]>> _dict
= new ConcurrentDictionary<Type, ConcurrentDictionary<PropertyInfo, ValidationAttribute[]>>();
/// <summary>
/// InputDto属性验证
/// </summary>
public static void Validate<TKey>(this IEnumerable<IInputDto<TKey>> dtos)
{
IInputDto<TKey>[] inputDtos = dtos as IInputDto<TKey>[] ?? dtos.ToArray();
Check.NotNull(inputDtos, nameof(dtos));
foreach (IInputDto<TKey> dto in inputDtos)
{
Validate(dto);
}
}
/// <summary>
/// InputDto属性验证
/// </summary>
public static void Validate<TKey>(this IInputDto<TKey> dto)
{
Check.NotNull(dto, nameof(dto));
Type type = dto.GetType();
if (!_dict.TryGetValue(type, out ConcurrentDictionary<PropertyInfo, ValidationAttribute[]> dict))
{
PropertyInfo[] properties = type.GetProperties();
dict = new ConcurrentDictionary<PropertyInfo, ValidationAttribute[]>();
if (properties.Length == 0)
{
_dict[type] = dict;
return;
}
foreach (var property in properties)
{
dict[property] = null;
}
_dict[type] = dict;
}
foreach (PropertyInfo property in dict.Keys)
{
if (!dict.TryGetValue(property, out ValidationAttribute[] attributes) || attributes == null)
{
后面还有 16 行代码,解锁后查看完整代码
24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明
AI 解读 AI
登录后可用,每次 10 算力,解读结果公开显示在下面。
还没有人解读过这个文件。