C#泛型设计的一个小陷阱.】的更多相关文章

距离上次发表博客已经有几年了. 对于没能坚持更新博客,实在是感觉到甚是惭愧. 闲言少叙, 直接切入主题. 背景 最近一直在对于公司一个网络通信服务程序使用.net core 进行重构.重构的目的有两个:一是让程序能够跨平台运行. 二是优化程序代码结构是程序的可维护性有所提升.  重构的过程主要由我来设计底层的架构. 在这个过程中,由于我对C# 泛型的理解还不够深入,所以在这个方面我就犯了个错误. 希望本文能把我犯的这个错误阐述清楚, 如果能帮助园里其他朋友避免这个问题当然是最好的了. 早前的设计…
分享一个简单的小需求应该怎么设计实现以及有关Redis的使用 Redis在实际应用中使用的非常广泛,本篇文章就从一个简单的需求说起,为你讲述一个需求是如何从头到尾开始做的,又是如何一步步完善的.之前写过一篇<如何实现页面广告随时上下线.过期自动下线及到时自动上线>,也涉及到了Redis在项目中的实际应用,有兴趣的可以看一下. 需求 设定,现在我们有一个APP,产品新提出一个叫“程序员树洞”的功能,具体功能就不说了,其中这个功能有一点需要做的是在使用该功能时,如果是首次进入会展示一个协议页面,用…
先看看如下C#的脚本代码: 猜猜控制台打出来的是什么? In the bool parameter function, value info is:  True 肯定出乎很多人的意料吧? transform的类型跟bool类型一点关系都没有,怎么会调用TestFunction(bool value)呢?我碰到这个问题的时候,第一反应是编译器出问题了,后来同事的机器上一样有同样的运行结果.于是我继续写了如下代码: 这次的运行结果符合预期了,调用的是void TestFunction(System.…
Java里面运行一个线程可以通过继承Thread的方式,也可以通过实现Runnable的接口来实现,那么两者能不能混用呢,比如以下的例子: public class JavaTest extends Thread{ public JavaTest(Runnable target) { super(target); } public void run() { System.out.println("run() in JavaTest thread."); } public static…
我们的APP从启动到进入主页面.是通过presentViewController构造了一个ViewController序列,类似于首页 -> 登陆页 -> 启动载入页 -> 主页面 当中.在启动载入页的viewDidAppear方法里做了非常多逻辑处理: -(void) viewDidAppear:(BOOL)animated{ dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(…
QString::toWCharArray(wchar_t * array) 其中 wchar_t * array 除了要分配内存之外,必须用 wmemset 初始化. 环境是 Visual Studio 2015. QT官方文档确实注明了:Note: This function does not append a null character to the array. 另一种转换方法 auto archiveWString = mArchive.toStdWString(); auto ar…
背景 周五本该是愉快的,可是今天花了一个早上查问题,为什么要花一个早上?我把原因总结为两点: 日志信息严重丢失,茫茫代码毫无头绪. 对泛型的认识不够,导致代码出现了BUG. 第一个原因可以通过以后编码谨慎的打日志来解决,我们今天主要来一起回顾下JAVA泛型基础. 一个小栗子 先看下面一个例子,test1实例化一个List容器的时候没有指定泛型参数,那么我们可以往这个容器里面放入任何类型的对象,这样是不是很爽?但是当我们从容器中取出容器中的对象的时候我们必须小心翼翼,因为容器中的对象具有运行时的类…
1,当心ISNULL函数对你的逻辑引起BUG 有人喜欢或者习惯于(并不代表我推荐,甚至这种写法没有任何好处)用ISNULL处理变量这种方式写查询 比如:select * from TestISNULL where name = ISNULL(@name,name) @name相当于传入到存储过程中的参数,如果@name为null, 相当于:select * from TestISNULL where name = name,看起来恒成立,是真的吗? 目的是在@name为null的时候,这个查询条…
python小练习1:设计这样一个函数,在桌面的文件夹上创建10个文本,以数字给它们命名. 使用for循环即可实现: for name in range(1,11): desktop_path='C://Users/Lenovo/Desktop/' full_path=desktop_path+str(name)+'.txt' file=open(full_path,'w') file.close()…
转自http://sharecore.net/blog/2014/01/09/the-trap-in-golang-list/ 一直想不清楚一个问题,简单设计的东西到底是“坑多”还是“坑少”呢? 复杂的设计,考虑的太全面,使用起来更麻烦,使用者容易陷入乱,落入自身的陷阱;而简单的设计呢,在许多方面上又顾及不周,如果使用者对其“设计”没仔细研究,或者其实现本身又是一个黑盒子,也容易掉入到设计本身遗留下来的“陷阱”.下面是我刚开始使用Go写代码时碰到的一个小“坑”,这个“坑”的原因我归结为后者. 这…
Redola.Rpc 的一个小目标 Redola.Rpc 的一个小目标:20000 tps. Concurrency level: 8 threads Complete requests: 20000 Time taken for tests: 0.886 seconds Time per request: 0.044 ms (avg) Requests per second: 22573 [#/sec] (avg) Concurrency level: 8 threads Complete r…
泛型是Java SE 1.5的新特性, 泛型的本质是参数化类型, 也就是说所操作的数据类型被指定为一个参数. 因此我们可以利用泛型和反射来设计一些通用方法. 现在有2张表, 一张user表和一张student表. user: student: 如果要根据id查询数据, 你会怎么做呢?写2个方法分别查询user和student?其实这时候我们就可以使用泛型和反射写一个通用的方法. user的实体类: private Integer id; private String username; priv…
前言: 软工的一个小作业:实现"黄金分割小游戏", 需要结对编程,队友:陈乐云    共用时两天. 早期思路设计: 采用键值对的形式,以Map作为存储结构.优点:能够将数据与用户对应,缺点:采用java实现过于复杂,工程量过大,需要消耗大量资源,类型转换容易出错. 后期思路设计: 采用二维数组:第一行用于存储用户输入原始数据,第二行用于存储中间数据(第一行的与G值做差的绝对值),第三行用于保存用户得分. 优点:实现简单,易于运算 分工: 前期:陈乐云负界面设计 和 代码的检查     …
最近被项目里面控件的设计搞的死去活来的,大部分的设计都会需要使用进度条的功能,因为UI形状的变态,使用ProgressBar不能满足需求,没办法就自己想办法实现进度显示.折腾的多了发现一个很不错的方法来实现进度显示的问题.不需要进行复杂的计算,具体就是借用线性渐变画刷. 线性渐变画刷在使用的时候设置里面的Offset的时候,你会发现它用的是相对值,也就是0-1.换句话说,不管你的填充到底多长,反正就是通过百分比来显示你的高度,只要你将代码写成这个模样 然后你会看到效果是这个模样的: 已经成功了一…
前言:在讲述这个小问题之前,我们有必要先了解一下UIViewAutoresizing的有关属性概念和使用详解. 参考:自动布局之autoresizingMask使用详解(Storyboard&Code)     现在已经不像以前那样只有一个尺寸,现在最少的iPhone开 发需要最少需要适配三个尺寸.因此以前我们可以使用硬坐标去设定各个控件的位置,但是现在的话已经不可以了,我们需要去做适配,也许你说可以使用两套UI 或两套以上的UI,但那样不高效也不符合设计.iOS有两大自动布局利器:autore…
1   背景假设 厦门央瞬公司是一家电子元器件设备供应商,其中有个ARM部门,专门负责ARM芯片的方案设计.销售,并在北京.上海各设立了一个办事处.对于工作日志,原先采用邮件方式发给经理,但是这种方式有个缺点,那就是不具备连续性,要看以前的日志必须一封一封邮件去查看,很麻烦.于是就想到利用 Subversion, 让员工在自己电脑上编辑日志,然后利用svn传送回来,既方便员工自己编写日志,又方便对日志的归档处理,而且提交日志的时候只需要执行一下 svn update 即可,比发送邮件还要简单的多…
go的变量声明有几种方式: 1 通过关键字 var 进行声明 例如:var i int   然后进行赋值操作 i = 5 2 最简单的,通过符号 := 进行声明和赋值 例如: i:=5 golang会默认它的类型 下面看一段代码,我们先声明一个变量a,然后再重新声明变量a,b,在这个函数中,变量a被声明了2次,成为a的重声明(redeclare),执行结果为23 package main import ( "fmt" ) func main(){ a:=1 a,b:=2,3 fmt.P…
想必大部分学过java的人都应该做过这种题目: public class Test { public static void main(String[] args) { //第一个字符串 String s1="hello"; //第二个字符串 String s2="hello"; //比较s1和s2是否相同 System.out.println(s1==s2); /** * 修改变量 */ s1=new String("hello"); s2=n…
PixiJS PixiJS使用WebGL,是一个超快的HTML5 2D渲染引擎.作为一个Javascript的2D渲染器,Pixi.js的目标是提供一个快速的.轻量级而且是兼任所有设备的2D库. 官方网址: http://www.pixijs.com/ 知识点 做一个小游戏,我们使用到PixiJS的功能不多,只需要了解以下几个点即可快速上手. PIXI.Application 创建一个游戏时第一个要初始化的对象. stage 舞台,我们可以看做是所有对象的根节点,类似于document. PIX…
我使用最多的DEV控件就是这个TreeList啦,当然用好它很不简单,如果用好它,能做出很精彩的树形层次结构图.TreeList控件很强大,以至于你看DEV自带的DEMO,也得浪费你很长时间应用.DEV控件的DEMO只是告诉你有些什么功能,只是抛砖引玉,决不能照搬DEMO! 用好TreeList控件绝对会让你的软件锦上添花!精益求精促使我总想用TreeList实现出更好的效果,但对TreeList控件的每一步深入学习,都需要花费不要时间和精力.现在记录一下我学习使用该控件的一个小功能的过程. 就…
C++开发的项目难免会用到STL的string,使用管理都比char数组(指针)方便的多,但在得心应手的使用过程中也要警惕几个小陷阱,避免我们项目出bug却迟迟找不到原因. 1.  结构体中的string赋值问题 直接通过一个例子说明,下面的例子会输出什么: #include <iostream> #include <string> #include <stdlib.h> using namespace std; struct flowRecord { string a…
离职在即,也没什么事情做,就鼓捣了一下.任意搭建了一个小框架,看看以后能不能搞出自己的一个model,好了.不说别的,上代码 1,先上依赖库 compile 'io.reactivex:rxandroid:1.2.1' compile 'com.squareup.okhttp3:okhttp:3.3.1' compile 'io.reactivex:rxandroid:1.1.0' compile 'io.reactivex:rxjava:1.1.0' compile 'com.squareup…
在定义函数的时候,如果函数的参数有默认值,有两种类型的参数,一种是整数,字符串这种不可变类型,另一种是列表这种可变类型,对于第一种情况没有什么特殊的地方,但是对于可变类型,有一个微妙的小陷阱. 可变类型以及小陷阱: # coding=utf-8 def append_item(item, list1=[]): list1.append(item) return list1 print(append_item((1))) # [1] print(append_item((2))) # [1, 2]…
以下内容由Mockplus(摹客)团队翻译整理,仅供学习交流,Mockplus是更快更简单的原型设计工具. 众所周知,产品用户体验很重要,即使是Google也知道这一点.但是,当真正涉及到UX 设计销售时, 往往会让人觉得似乎并没有人认识到其重要性.因为,当我们提出这些想法时,客户也好,同事也好,都表现出了完全难以理解的状态.那么我们究竟怎样才能更好地服务客户,并让我们所做的事情更有价值的呢?以下为大家介绍10个能够改善产品UX设计销售的小窍门, 希望对大家有所帮助: 1. 用户体验设计不是关于…
一般一个项目开始之前都会有启动会,需求交底等等,其中会有一个环节,大讲特讲项目的意义,然后取一个高大上的项目名字,咱这是一个小功能谈不上项目,但是名字不能太小气了.好吧,就叫Trump吧.没有任何含义,玩嘛! 项目分层结构也要在这里说一下,这次这个小功能仿照DDD的分层模式,一定记住我说的是仿照.因为我也不懂DDD,我就画个皮. DDD这个东西中文名字应该叫领域驱动设计,园子很多大神分享过.讲解过.看了很多博客很多书,依然没太理解这么复杂的东西(没有实践,纸上得来终觉浅).这里简单说说自己的理解…
由于3月可能要结束实习,所以应该不会有特别固定的主题,另外我会在月初陆续补上上个月的番外篇Projection和TMS,作为介绍性的内容对矢量切片部分进行补充,剩下时间不定期写一些杂烩. 最近两天在做一个地图上popup浮动层的功能,因为之前一直沿用OpenLayers2中自带的popup组件,但OL2中实在是难以控制浮动层的样式,远不及直接在地图上覆盖div布局来的快,所以我决定暂时放弃使用popup,自己编写一个浮动层. 一 问题的来源 设计草图如下(样式主要参照了百度地图的弹出层),主要讲…
(1)DAO泛型设计:当二哥或多个类中有类似的方法时,可以将这些累死的方法提出到类中,形式一个泛型父类 (2)反射反型:在泛型父类中获取子类的具体类型的过程,叫反射反型 package cn.itcast.web.generic; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import org.apache.commons.dbutils.QueryRunner; import org.a…
大学最后的考试终于结束了,迎来了暑假和大四的漫长的"自由"假期.当然要自己好好"玩玩"了. 我最近在学习Python,本意是在机器学习深度学习上使用Python进行编程的而学习的.偶然接触了pygame,觉得很感兴趣,所以打算使用pygame制作一个小游戏作为对Python学习和练习. 废话不多说了,先介绍一下pygame. 简要介绍: 请原谅本人比较懒,直接上百度百科进行介绍:(点我打开链接) Pygame是跨平台Python模块,专为电子游戏设计. 包含图像.声…
学习了一段时间的web前端,感觉有点看不清前进的方向,于是就写了一个小爬虫,爬了51job上前端相关的岗位,看看招聘方对技术方面的需求,再有针对性的学习. 我在此之前接触过Python,也写过一些小脚本,于是决定用Python来完成这个小项目. 首先说说一个爬虫的组成部分: 1.目标连接,就是我需要爬取信息的网页的链接: 2.目标信息,就是网页上我需要抓取的信息: 3.信息梳理,就是对爬取的信息进行整理. 下面我来说说整个爬虫的设计思路: 总体思路:以“前端”关键字进行搜索,把搜索结果上面每一个…
C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制). C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制. 所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样.之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中…