C#读取泛型变量的值

Posted 左直拳

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#读取泛型变量的值相关的知识,希望对你有一定的参考价值。

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

话说,我有一段代码,对传过来的对象,希望判断它是否为空,或者里面是否有值。不为空,有值,才保存到缓存。不过这个对象是泛型变量。它对应的实际变量,常常是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#读取泛型变量的值的主要内容,如果未能解决你的问题,请参考以下文章

JAVA-基础-泛型

java中啥叫泛型??

泛型的泛型的好处

C#泛型参数的数据结构还原?

Java泛型学习

泛型概念及其特性