using System.Reflection;
using Dpz.Core.EnumLibrary;
namespace Dpz.Core.Public.ViewModel;
/// <summary>
/// Represents the VmUserInfo type.
/// </summary>
public class VmUserInfo
{
/// <summary>
/// 账号
/// </summary>
public required string Id { get; set; }
/// <summary>
/// 昵称
/// </summary>
public required string Name { get; set; }
/// <summary>
/// 最后访问时间
/// </summary>
public DateTime? LastAccessTime { get; set; } = DateTime.Now;
/// <summary>
/// 个性签名
/// </summary>
public string? Sign { get; set; }
/// <summary>
/// 邮箱
/// </summary>
public string? Email { get; set; }
/// <summary>
/// 头像
/// </summary>
public required string Avatar { get; set; }
/// <summary>
/// 性别
/// </summary>
public Sex Sex { get; set; }
/// <summary>
/// 权限
/// </summary>
public Permissions? Permissions { get; set; }
/// <summary>
/// 是否启用
/// </summary>
public bool? Enable { get; set; }
/// <summary>
/// 唯一 key
/// 当密码修改时,这个key将会改变
/// </summary>
public required string Key { get; set; }
/// <summary>
/// 当前登录会话 ID
/// </summary>
public string? SessionId { get; set; }
/// <summary>
/// 邮箱是否已验证
/// </summary>
public bool EmailVerified { get; set; } = false;
private static readonly Lazy<Dictionary<string, PropertyInfo>> PropertyCache = new(() =>
{
var type = typeof(VmUserInfo);
return type.GetProperties().ToDictionary(x => x.Name, x => x);
});
/// <summary>
/// Executes GetCanWriteProperties.
/// </summary>
public static Dictionary<string, PropertyInfo> GetCanWriteProperties()
{
return PropertyCache
.Value.Where(x => x.Value.CanWrite)
.ToDictionary(x => x.Key, x => x.Value);
}
/// <summary>
/// Executes Empty.
/// </summary>
public static VmUserInfo Empty() =>
new()
{
Id = "",
Name = "",
LastAccessTime = DateTime.Now,
Sign = "",
Email = "",
Avatar = "",
Sex = Sex.Other,
Permissions = null,
Enable = true,
Key = "",
SessionId = null,
};
}
⚠⚠ 以下内容为AI分析的结果,请根据实际情况进行判断。
代码解释
这是一个C#的视图模型(ViewModel)类,用于表示用户信息。以下是详细解释:
类的整体结构
public class VmUserInfo
- 命名空间:
Dpz.Core.Public.ViewModel - 这是一个用户信息的数据传输对象(DTO),通常用于在应用层之间传递用户数据
属性说明
必填属性(required)
- Id: 用户账号(必填字段)
- Name: 用户昵称(必填字段)
- Avatar: 用户头像(必填字段)
- Key: 唯一密钥,密码修改时会改变(安全机制,必填字段)
可选属性
- LastAccessTime: 最后访问时间,默认为当前时间
- Sign: 个性签名
- Email: 邮箱地址
- Sex: 性别(枚举类型)
- Permissions: 权限信息(可能是权限枚举或对象)
- Enable: 是否启用账号
- SessionId: 当前登录会话ID
- EmailVerified: 邮箱是否已验证,默认为false
核心功能
1. 属性缓存机制
private static readonly Lazy<Dictionary<string, PropertyInfo>> PropertyCache
- 使用
Lazy<T>实现懒加载,只在首次使用时初始化 - 通过反射获取类的所有属性信息
- 将属性信息缓存在字典中(键为属性名,值为PropertyInfo对象)
- 性能优化:避免重复反射操作
2. 获取可写属性
public static Dictionary<string, PropertyInfo> GetCanWriteProperties()
- 筛选出所有可写(
CanWrite)的属性 - 返回属性名和属性信息的字典
- 用途:动态赋值、数据映射等场景
3. 空对象模式
public static VmUserInfo Empty()
- 创建一个默认的空用户对象
- 所有必填字段都被初始化为空字符串或默认值
- 遵循空对象模式,避免null引用异常
设计亮点
- 使用
required关键字(C# 11特性):编译时强制初始化必填属性 - Lazy初始化:延迟加载,提高性能
- 反射缓存:避免重复反射开销
- 空对象模式:提供安全的默认实例
- 清晰的注释:每个属性都有中文说明
典型使用场景
- 用户登录后的信息存储
- API返回的用户数据
- 前后端数据交互
- 会话管理(通过SessionId和Key)
- 权限验证(通过Permissions)
AI 正在分析代码…
评论加载中...