C# 实现简单的缓存工具类

简介: 基于Dictionary实现线程安全的内存缓存,支持设置过期时间,自动清理过期项。同时提供枚举转键值对列表工具,便于下拉框数据绑定,提升开发效率。

基于 Dictionary 实现内存缓存,支持设置过期时间。
public class CacheItem
{
public object Value { get; set; }
public DateTime ExpireTime { get; set; }
public bool IsExpired => DateTime.Now > ExpireTime;
}

public class MemoryCache
{
private readonly Dictionary _cache = new Dictionary();
private readonly object _lockObj = new object();

// 添加缓存
public void Set(string key, object value, TimeSpan expireTime)
{
    lock (_lockObj)
    {
        _cache[key] = new CacheItem {
            Value = value,
            ExpireTime = DateTime.Now.Add(expireTime)
        };
    }
}

// 获取缓存
public T Get<T>(string key) where T : class
{
    lock (_lockObj)
    {
        if (_cache.TryGetValue(key, out var item) && !item.IsExpired)
        {
            return item.Value as T;
        }
        _cache.Remove(key); // 清理过期缓存
        return null;
    }
}

// 移除缓存
public void Remove(string key)
{
    lock (_lockObj) _cache.Remove(key);
}

}

// 调用示例
public static void TestCache()
{
var cache = new MemoryCache();
cache.Set("user_name", "张三", TimeSpan.FromMinutes(5));
string name = cache.Get("user_name");
Console.WriteLine("缓存值: " + name);
}

  1. C# 实现枚举转下拉列表数据源
    将枚举转换为 KeyValuePair 列表,用于界面下拉列表的绑定。
    csharp
    public enum Gender { 男, 女, 未知 }

public static class EnumHelper
{
// 枚举转键值对列表
public static List> EnumToKeyValueList() where T : Enum
{
return Enum.GetValues(typeof(T))
.Cast()
.Select(e => new KeyValuePair(Convert.ToInt32(e), e.ToString()))
.ToList();
}
}

// 调用示例
public static void TestEnumToList()
{
var genderList = EnumHelper.EnumToKeyValueList();
foreach (var item in genderList)
{
Console.WriteLine($"值: {item.Key}, 名称: {item.Value}");
}
}

相关文章
|
2天前
|
安全 C#
C# 泛型:实现类型安全的通用代码
泛型通过类型参数(如T)实现类型通用性,可定义不指定具体类型的类或方法,使用时再确定类型。示例中,Swap&lt;T&gt;方法可交换任意同类型变量,List&lt;T&gt;集合避免装箱拆箱,提升性能与安全。
|
2天前
|
C#
C# 字符串操作:常用方法汇总(含案例)
C# 提供丰富的字符串操作方法,如拼接、截取、替换和判断等。本文通过工具类案例演示如何高效处理字符串,提升开发效率与代码可读性。
|
2天前
|
C#
C# 日期时间操作:格式化与计算
DateTime类用于处理日期时间操作,支持格式化输出、加减计算及获取特定日期(如本月第一天)。示例代码展示了常用功能:格式化、计算日期差、增减天数等,便于高效处理时间数据。
|
2天前
|
JSON C# 数据格式
C# JSON 序列化与反序列化:Newtonsoft.Json 用法
JSON是前后端交互常用格式,Newtonsoft.Json(Json.NET)是C#中最流行的JSON处理库。本文介绍如何使用它实现对象与JSON字符串的序列化和反序列化,并提供封装工具类及调用示例,便于在项目中快速集成与使用。
|
2天前
|
C#
C# 继承:复用父类功能的核心技巧
C# 中通过“:”实现继承,子类可复用并重写父类的虚方法。Student 继承 Person,重写 Introduce 方法,既调用父类逻辑,又扩展个性行为,体现多态特性。
|
2天前
|
C#
C# 文件操作:读取与写入文本文件
`File`类提供文件操作静态方法,适合快速读写;大文件推荐使用`StreamReader/StreamWriter`以降低内存占用。示例展示了文本文件的写入、追加与读取操作,支持自动创建目录,建议处理路径时注意权限并优先使用相对路径。
|
2天前
|
C#
C# 异常处理:try-catch-finally 避免程序崩溃
异常处理用于捕获运行时错误(如空引用、文件不存在),确保程序稳定。通过 `try` 包裹可能出错的代码,`catch` 捕获并处理异常,`finally` 确保资源释放等操作始终执行,提升代码健壮性。
|
2天前
|
C# 数据安全/隐私保护
C# 正则表达式:快速匹配与验证
正则表达式用于字符串模式匹配,如手机号、邮箱、密码验证等。C# 通过 `System.Text.RegularExpressions` 命名空间中的 `Regex` 类实现。本文示例展示了使用 `RegexHelper` 工具类进行常见验证:`IsPhoneNumber` 验证中国大陆手机号(1开头,共11位);`IsEmail` 校验邮箱格式;`IsValidPassword` 判断密码是否包含字母和数字且长度为8-20位;`ExtractNumbers` 提取字符串中所有数字。代码简洁高效,适用于数据校验与文本处理场景。
|
2天前
|
存储 缓存 安全
C# 字典(Dictionary):键值对存储的高效用法
`Dictionary&lt;TKey, TValue&gt;` 是键唯一且支持快速查找(O(1))的键值对集合,适用于存储映射关系。可通过 `Add` 添加、`TryGetValue` 安全获取、`Remove` 删除元素,遍历使用 `foreach`,建议优先使用 `TryGetValue` 提升性能。
|
2天前
|
C#
C# 枚举(Enum):规范常量定义
枚举用于定义命名常量,提升代码可读性与维护性。示例中定义订单状态枚举,演示赋值、转换、解析及遍历操作,避免使用魔法数字,使逻辑更清晰易懂。

热门文章

最新文章