博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c# 技巧之 泛型方法
阅读量:6291 次
发布时间:2019-06-22

本文共 1553 字,大约阅读时间需要 5 分钟。

泛型 指的是编译时不需要指定具体的参数类型,可以在运行时动态地赋予某一种数据类型的机制。  相信很多人对泛型类并不陌生,像Dictionary,List等结构都属于泛型类。有趣的是,一个函数/方法也可以泛化。

假如我们需要些一个函数,这个函数负责某一种逻辑操作(例如排序、求和、个数统计等),而不关心具体要操作的数据类型是什么,那么为了使这个函数变得更通用,就可以写成泛型方法。

举一个我遇到的简单例子:

项目中经常要写读文件,生成key-value 结构的字典。 每次都写StreamReader 和 Dicitonary 的句子会让人感觉码农真是一份无聊的职业。于是写了一个通用的加载key-value 字典的泛型方法:

class Common    {            internal static Dictionary
LoadDict
(string file, char sep, bool hasHeader = false, int keyidx=0, int valueidx=1) { Dictionary
res = new Dictionary
(); using (StreamReader rd = new StreamReader(file)) { string content = ""; if (hasHeader) rd.ReadLine(); while ((content = rd.ReadLine()) != null) { string[] words = content.Split(sep); T1 key = (T1) Convert.ChangeType(words[keyidx], typeof(T1)); T2 value = (T2)Convert.ChangeType(words[valueidx], typeof(T2)); if (!res.ContainsKey(key)) res.Add(key, value); } } return res; } }

这样只要调用Common.LoadDict<string,int>( filename, ...) 就可以了。这个函数就像是一个模板,在运行时再确定要使用什么样的数据类型。 

注意其中关于类型转换的代码:

T1 key = (T1) Convert.ChangeType(words[keyidx], typeof(T1));

如果类型操作还有更细致的要求,那么可以这样:

if (typeof(T) == typeof(int))    { ... }else if (typeof(T) == typeof(double)){ ... }else  ...

 

转载于:https://www.cnblogs.com/sylvanas2012/p/5347760.html

你可能感兴趣的文章
重定向
查看>>
进IBM就像移民
查看>>
***路由器备份/变更时的邮件通知
查看>>
DIY属于自己个性化的无线云热点
查看>>
Linux初级运维(四)——grep的用法及正则表达式
查看>>
我的友情链接
查看>>
基于MYSQL-GTID主从复制
查看>>
server2016下搭建web服务器&三种虚拟主机实验
查看>>
MySQL数据库触发器
查看>>
centos5安装nagios
查看>>
Python List pop()方法
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
tkinter 01 Label & Button 标签和按钮
查看>>
LSTM简单入门
查看>>
SQL Server Always On模式导致SharePoint 配置向导报错
查看>>
NAT
查看>>
2.1-指定ip和指定文件同步脚本
查看>>
2.7-dockerfile格式
查看>>
Java迭代模式(Iterator模式)
查看>>