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

话说,我有一段代码,对传过来的对象,希望判断它是否为空,或者里面是否有值。不为空,有值,才保存到缓存。不过这个对象是泛型变量。它对应的实际变量,常常是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. sim中do文件/memory(readmemb命令符)/移位编写
  2. Server.Transfer VS Response.Redirect
  3. Linux下rz/sz安装及使用方法
  4. apache camel_Apache Camel日志组件示例
  5. [UE4]把枪抽象为一个类
  6. Linux cat 命令用法
  7. Linux下使用nohup运行python脚本报错:Import error: No module named numpy问题解决
  8. i3wm中Chrome不保存密码
  9. 动易软件向网站服务器上传软件,动易CMS粘贴图片自动上传到服务器(Java版)
  10. 李广难封–有感于团队建设
  11. ubuntu 挂载U盘 NTFS
  12. MongoDB(shel)-表增删改
  13. 一群在全球顶会崭露头角的阿里新生代白帽:能查漏洞还会焊接
  14. Python动物图像分割API简单调用实例演示,阿里达摩院视觉智能开放平台使用步骤
  15. 使用CAD偏移和阵列命令绘制图形、使用CAD旋转复制命令绘制图形
  16. python的scrapy爬虫模块间进行传参_小猪的Python学习之旅 —— 4.Scrapy爬虫框架初体验...
  17. Vue中 v-vif 与v-for 的问题
  18. android 教程 美化,安卓Buzz桌面DIY美化教程
  19. 四款电脑桌面上的优质软件,硬核又实用,有个性而不张扬
  20. cad 打开硬件加速卡_谁说没有核显就不能开启硬件加速?手把手教你开启加速

热门文章

  1. 通用的pc web官网外壳
  2. SIMATIC WINCC与PLC进行以太网通信的具体组态方法和步骤
  3. web安全|渗透测试|网络安全14天
  4. 超实用的视频转码器:HandBrake for Mac中文版
  5. java 下载文件 进度条_使用处理程序下载文件时显示百分比的进度条
  6. 服务器采购框架合同协议书范本,服务器采购框架合同协议书范本(12页)-原创力文档...
  7. 【越狱开发】《我叫MT online》开源辅助工具
  8. 使用PortTunnel来透过局域网架网站
  9. 【读书笔记】《高效演讲》——如何说话惹人爱
  10. 【技术文档】百度搜索技巧