基于 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);
}
- 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}");
}
}