随笔分类 - C#
摘要:三元运算符(?:) 三元运算符应该都很熟,通常我们也可以使用if-else来代替三元运算,这一点就不多说了,一个简单的例子: //取一个0.5-1之间的随机值 var value = new Random().NextDouble(); value = value < 0.5 ? 0.5 + val
阅读全文
摘要:开始之前,先想一下,作为C#开发,你在开发过程中遇到的最多的异常是哪个? 不出意外,估计都是空指针引用,ArgumentNullException! 那么有没有办法尽量在开发过程检查出来,而不是等他在运行时报错?为此,微软老大哥一直在努力中。 可空上下文 从C#8.0开始,我们可以通过启用可空上下文
阅读全文
摘要:大多数编程语言都支持显示转换,也称为强制转换,它与隐式转换相呼应,比如,一般的,整型可以通过隐式转换成浮点型,而浮点型需要通过强制转换成整型: int i = 32; double d = i;//整型隐式转换成浮点型 int j = (int)d;//浮点型显示转换成整型 目前,C#中可用的隐式转
阅读全文
摘要:你是否考虑过这个问题:为什么不同类型之间的变量可以赋值,而不需要强制转换类型?如: int i = 1; long l = i; object obj = 1; Exception exception = new ArgumentNullException(); Array array = new
阅读全文
摘要:C#的类型转换分为显式转换和隐式转换,显式转换需要自己声明转换类型,而隐式转换由编译器自动完成,无需我们声明,如: //long需要显式转换成int long l = 1L; int i = (int)l; //int可以隐式的转换成long int i = 1; long l =; 我们还可以自定
阅读全文
摘要:从C#9.0开始,我们有了一个有趣的语法糖:记录(record) 为什么提供记录? 开发过程中,我们往往会创建一些简单的实体,它们仅仅拥有一些简单的属性,可能还有几个简单的方法,比如DTO等等,但是这样的简单实体往往又很有用,我们可能会遇到一些情况: 比如想要克隆一个新的实体而不是简单的引用传递 比
阅读全文
摘要:ref表示引用的意思,C#中它有多种用法,这里简单总结一下: 1、按引用传递参数 具体可见:C#中的值传递与引用传递(in、out、ref) 2、引用局部变量 引用局部变量指的是在变量声明时使用ref关键字(或者使用ref readonly表示未只读),表示这个变量是另一个变量的引用,而不是值对象的
阅读全文
摘要:在C#中,方法、构造函数可以拥有参数,当调用方法或者构造函数时,需要提供参数,而参数的传递方式有两种(以方法为例): 值传递 值类型对象传递给方法时,传递的是值类型对象的副本而不是值类型对象本身。常用的一个例子: public struct MyStruct { public int Value {
阅读全文
摘要:Options是.net core提出的一种辅助配置机制,即选项。 目前,我们可以使用的Options有五种(源码): IOptionsFactory<>:Options的创建工厂(Singleton),所有的Options均使用它仅限创建,可以使用名称创建指定名称的Options IOptions
阅读全文
摘要:友好的注释能提高代码的可读性,几乎所有的编程语言都支持注释。 在C#中,注释不是可执行代码的一部分,因此注释不会被编译到程序集中去,但是我们可以提取注释【右键项目】-【属性】-【生成】-【输出】-【Xml文档文件】: 如果勾选了输出注释,那么VS在没有注释的方法、类型、属性等地方将会抛出警告,提醒添
阅读全文
摘要:RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。 RSA解决了对称加密的一个不足,比如AES算法加密和解密时
阅读全文
摘要:高级加密标准(Advanced Encryption Standard,简写AES),是一种用来替代DES的对称加密算法,相比DES,AES安全性更高,加密速度更快,因此被广泛使用。 理论上看,AES可被破解,但是就目前的硬件性能来看,目前AES还是安全的,在开发工程中,如果要使用对称加密算法,应该
阅读全文
摘要:数据加密标准(DES,Data Encryption Standard,简写DES)是一种采用块密码加密的对称密钥算法,加密分组长度为64位,其中8、16、24、32、40、48、56、64 等8位是校验位,其余56位作为秘钥。 DES加密解密需要一个秘钥,使用这个秘钥加密的数据只能使用这个秘钥解密
阅读全文
摘要:哈希算法又称散列算法,它可以从任何数据中快速的创建一个凭证,而这个凭证很难被推倒出来,因为一丁点的变化会导致凭证的差别恨到,也就是说哈希算法具有不可逆性,因此它在密码数据校验方面用的很广,比如我们常用的MD5、SHA1、SHA256、SHA384、SHA512等等 本文主要从应用的角度使用各语言去应
阅读全文
摘要:最近在写一个xml序列化及反序列化实现时碰到个问题,大致类似下面的代码: class Program { static void Main1(string[] args) { var test = new Test() { A = "test" }; var ms = new MemoryStrea
阅读全文
摘要:接上一篇:ActiveMQ基础教程(三):C#连接使用ActiveMQ消息队列 这里继续说下.net core集成使用ActiveMQ。因为代码比较多,所以放到gitee上:https://gitee.com/shanfeng1000/dotnetcore-demo/tree/master/Acti
阅读全文
摘要:接上一篇:ActiveMQ基础教程(二):安装与配置(单机与集群) 安装部署好集群环境:192.168.209.133:61616,192.168.209.134:61616,192.168.209.135:61616 因为ActiveMQ的集群模式是一种master-slave模式,master节
阅读全文
摘要:之前有写到一篇介绍EasyNetQ的博文(C# .net 使用rabbitmq消息队列——EasyNetQ插件介绍 ),所以本文从.net core的角度去继承使用EasyNetQ,而用法类似于之前集成使用rabbitmq的博文:.net core使用rabbitmq消息队列 (二) 国际惯例,先上
阅读全文
摘要:之前有写过.net core集成使用rabbitmq的博文,见.net core使用rabbitmq消息队列,但是里面的使用很简单,而且还有几个bug,想改下,但是后来想了想,还是算了,之前使用的是.net core 2.x,还是重新整理一遍吧! 由于代码比较多,我把代码传到gitee上了,地址见:
阅读全文
摘要:首先,对于浮点类型,double和float存在精度丢失问题,这一点在之前的一篇博文中有提到(C# double类型精度丢失问题),于是,一般时候推荐大家使用decmal,特别是涉及到一些金融计算时,double和float会让人崩溃的。 所谓鱼与熊掌不可兼得,decimal有更高的精度,不容易出现
阅读全文