泛型利于编写共用代码,但也有局限性,因为无法直接知道它的确切类型,更遑论读取里面的值。不过,利用反射,其实也能够读它的值。

话说,我有一段代码,对传过来的对象,希望判断它是否为空,或者里面是否有值。不为空,有值,才保存到缓存。不过这个对象是泛型变量。它对应的实际变量,常常是List对象。存入缓存之前,先判断是否Count() > 0。要实现此功能,需要读取其属性,看有没有一个名为Count的属性,有的话,是否大于0。

代码如下:

/*
using System;
using System.Linq;
using System.Reflection;
using System.Threading.Tasks;
*/public async Task<T> StringGetShellAsync<T>(string key,Func<Task<T>> shell, TimeSpan? timeSpan = null)
{/** 如果缓存中存在键值为key的值,则直接返回* 否则调用shell获得该值,并以key为键值,存储于缓存;然后返回该值* */if (KeyExists(key)){return StringGet<T>(key);}else{var t = await shell();if (needSave(t)){StringSet<T>(key, t, timeSpan);}return t;}
}
private bool needSave<T>(T t)
{bool yes = false;if (t != null){//这个泛型变量,常常是List对象。PropertyInfo[] propertys = t.GetType().GetProperties();PropertyInfo pi = propertys.Where(s => s.Name == "Count").FirstOrDefault();if(pi != null && (int)pi.GetValue(t) > 0){yes = true;}}return yes;
}

我放下笃NET已经很久了,不过现在又捡起来。由于之前有一点积累,记忆一旦被唤醒,雄风犹在。

C#读取泛型变量的值相关推荐

  1. shell从oracle中获取变量,shell 如何读取环境变量的值

    笔者最近在开发中遇到新旧版本不兼容的问题,需要我解析的内容更新到最新后对于旧的日志将不支持,所以我需要设置开关来区分是用新的脚本还是原来旧的脚本: 这样我就遇到了比较基础的问题,那就是在shell脚本 ...

  2. php env 函数不存在,PHP编程:探究Laravel使用env函数读取环境变量为null的问题

    <PHP编程:探究Laravel使用env函数读取环境变量为null的问题>要点: 本文介绍了PHP编程:探究Laravel使用env函数读取环境变量为null的问题,希望对您有用.如果有 ...

  3. 【C#食谱】【面食】菜单7:用默认值初始化泛型变量

    问题:ee6d64b9 你有一个泛型类包含一个由类自身定义类型参数的变量.由于对泛型对象的约束,你希望这个变量被初始化为其默认值. 解决方法: 非常简单的方法:只要使用default关键字初始化其值为 ...

  4. linux获取java环境变量的值,linux获取java环境变量的值

    linux获取java环境变量的值 [2021-02-11 00:17:01]  简介: 服务器 这篇文章主要为大家展示了linux环境下怎么配置环境变量,内容简而易懂,希望大家可以学习一下,学习完之 ...

  5. java map 泛型 反射_Java通过反射读取泛型

    packagecom.waibizi;importjava.lang.reflect.Method;importjava.lang.reflect.ParameterizedType;importja ...

  6. 为什么使用%lf读取double型的值,而用%f进行显示?

    为什么使用%lf读取double型的值,而用%f进行显示? 注意scanf函数和printf函数是不同寻常的函数,因为它们都没有将函数的参数限制为固定数量.scanf函数和printf函数又可变长度的 ...

  7. java unexpected type_意外类型需要变量找到值(Unexpected type required variable found value)...

    意外类型需要变量找到值(Unexpected type required variable found value) public class example { public ArrayList T ...

  8. C语言const:禁止修改变量的值

    C语言const:禁止修改变量的值 有时候我们希望定义这样一种变量,它的值不能被改变,在整个作用域中都保持固定.例如,用一个变量来表示班级的最大人数,或者表示缓冲区大小.为了满足这一要求,可以使用co ...

  9. 使用脚本编写 Vim 编辑器,第 1 部分: 变量、值和表达式

    优秀的文本编辑器 有这样一则老笑话:如果 Emacs 拥有一款优良的文本编辑器,那么它将是一个优秀的操作系统,相反,如果 vi 拥有一个不错的操作系统,那么它将是一款非常出色的文本编辑器.这个笑话反映 ...

最新文章

  1. 京东金融科技学堂开班,AI 在金融云上有了新成果
  2. 计算机的应用范围归纳起来主要有,计算机应用基础知识概述.doc
  3. 机器学习笔记:Adam
  4. Maven(4)--POM配置
  5. pytorch默认初始化_Pytorch 实现权重初始化
  6. child pid xxx exit signal Segmentation fault (11)
  7. 全局模式下的正则表达式
  8. JavaScript 设计模式核⼼原理与应⽤实践 之 结构型设计模式
  9. 如何快速进入一个陌生的领域,高手通常用这三步
  10. 利用反射实现工厂模式
  11. VS2015 设置结构成员对齐
  12. 12. 信息系统项目的采购管理
  13. 天猫魔盘在ubuntu16.04中的使用
  14. java实现解压zip文件,(亲测可用)!!!!!!
  15. (1)前言-JsDroid引流脚本混合式开发技术系列教程By飞云脚本学院
  16. U3D常用介绍,搭建一个简单的三维效果
  17. SAP报表导出格式设置
  18. 桌面文件丢失如何找回?这两个方法值得一试
  19. Windows系统下安装Linux双系统(硬盘安装)
  20. php将文本文件中的内容呈现到一个表格中

热门文章

  1. 天猫11.11:搜索引擎实时秒级更新
  2. 怎么将pdf文件压缩的小一点
  3. python安装失败错误代码0x_Python Windows 7-安装失败0x80240017
  4. IT软件项目中的沟通管理
  5. 100颗宝石5个海盗怎么分
  6. 互联网日报 | 名创优品潮玩全球首店开业;百度昆仑1芯片实现量产;特斯拉在华超充站突破600座...
  7. Vue 动态修改网页标题和图标
  8. 信息系统项目管理师教程(第3版)- 马斯洛需求层次理论
  9. 李开复、沈向洋的恩师:印度农村走出的图灵奖得主
  10. 解决“飞鸽传书”无法显示局域网用户的方法