随笔分类 -  C#

摘要:.net 系统的初始化机制会默认将所有的对象的初始值都设置为 0。你无法强迫其他开发者必须用 0 以外的值来初始化值类型的某个实例。 因此, 你所创建的值类型必须能够应对初始值为 0 的情况。 enum 枚举尤其需要注意。如果某个类型无法将 0 当做有效的枚举值来看待, 那么就不应该将其设计为 en 阅读全文
posted @ 2020-10-25 18:22 YanyuWu 阅读(197) 评论(0) 推荐(0)
摘要:对于 C# 来说, 必须在创建的时候决定该类型的所有实例应该表现出什么样的行为。 对于具体应为什么类型, 没有具体的答案, 而是需要根据该类型的用法来判断。 值类型不是多态的,因此更适合存放应用程序的数据。 而引用类型可以多态, 因此应该用来定义应用程序的行为。 创建新类型的时候, 首先要考虑该类型 阅读全文
posted @ 2020-10-25 17:23 YanyuWu 阅读(141) 评论(0) 推荐(0)
摘要:本文参考自: https://devblogs.microsoft.com/dotnet/announcing-net-5-0-preview-6/ Today, we’re releasing .NET 5.0 Preview 6. It contains a small set of new f 阅读全文
posted @ 2020-06-28 18:25 YanyuWu 阅读(264) 评论(0) 推荐(0)
摘要:理解 yield 源码 比如我们有一段 code 如下所示: 反编译一下看看源码: 可以理解为带有 yield 语法糖的方法, getList() 在编译后, 底层实际上多了一个方法叫做: \d_x 实际上底层实现了一个迭代器, 这个实现其实和设计模式中迭代模式很相似. 反过来推, 当我们不使用 y 阅读全文
posted @ 2020-04-19 17:30 YanyuWu 阅读(285) 评论(0) 推荐(0)
摘要:background 要求: 将 list 集合中的元素遍历输出的时候, 顺便输出其 index. 集合元素如下: c 代码实现 以前我可能会这写, 感觉很low: 使用 linq 的改进写法: select 源码 reference 感谢: "Linq中带有迭代索引的Select扩展方法,为啥知道 阅读全文
posted @ 2020-04-19 11:06 YanyuWu 阅读(2509) 评论(1) 推荐(0)
摘要:问题描述 环境安装 .net core3.0和 .net standard2.0以后依旧无法使用C 8.0语法. 解决方案 1. edit project 文件 2. \\ 中的node如果没有\8.0\, 加上. 3. 重启vs后再次build project. 阅读全文
posted @ 2019-12-11 16:20 YanyuWu 阅读(1241) 评论(0) 推荐(0)
摘要:项目情形 最近做项目发现有个业务逻辑性能效率巨慢, 实际上是扫描cosmos上面16个文件夹下面的数据, 每个folder下面大概分为100来个对应user的fodler, 然后对应user folder下面存放的是user的数据. 原逻辑是一个folder一个folder去scan, 然后将统计的 阅读全文
posted @ 2019-12-05 18:10 YanyuWu 阅读(1606) 评论(0) 推荐(0)
摘要:参考link: https://www.infoq.com/articles/Async Streams/ 中文博客中非常易懂的一篇: https://www.cnblogs.com/CoderAyu/p/10680805.html 生产者和消费者的拉取模式以及推送模式 C 8.0 中添加了一个新特 阅读全文
posted @ 2019-09-25 17:06 YanyuWu 阅读(464) 评论(0) 推荐(0)
摘要:ref and out ref | out | it is necessary the parameters should initialize before it pass to ref. | it is not necessary to initialize parameters before 阅读全文
posted @ 2019-09-24 14:22 YanyuWu 阅读(107) 评论(0) 推荐(0)
摘要:其实很早就开始使用using了.但是对这个语法糖我自己一直没有总结也没有一个很好的文字描述解释.今天看其他的博文的时候发现有人对其做了简单的解释我觉得很好,很适合一种讲解.于是抄录下来 using (var context = new EF6RecipesContext()) { ... } 如果你 阅读全文
posted @ 2018-12-26 17:02 YanyuWu 阅读(184) 评论(0) 推荐(0)
摘要:Math.Round 原则: 四舍六入五取偶. 也就是说 0.1 0.4为0 0.5为0 0.6 0.9为1 1.5为2 Math.Ceiling 原则: 有小数就加1 0.1 = 1 Math.Floor 原则:总是舍去小数 0.1 = 0 阅读全文
posted @ 2018-08-26 15:58 YanyuWu 阅读(446) 评论(0) 推荐(0)
摘要:1. C#5.0 加入了async, await关键字. async是在声明异步方法时使用的修饰符, 声明放在返回值之前即可,await表达式则负责消费异步操作, 不能出现在catch或finally块, 非异步匿名函数(没有用async声明的匿名方法或者lambda表达式), lock语句或不安全 阅读全文
posted @ 2018-07-12 20:36 YanyuWu 阅读(451) 评论(0) 推荐(0)
摘要:"用事件去处理程序, 进而解决问题" 委托的目的 委托早在C#2的时候就已经初具模型, 但是并不是特别灵活, 制止C#3才在代码中被广泛使用. C#4中泛型委托, C#5中的异步委托, 委托的使用越来越灵活, 也越来越成为一个C#开发人员必备的技术. 委托有很多耳熟能详的使用之处, 匿名方法, la 阅读全文
posted @ 2018-07-12 20:35 YanyuWu 阅读(182) 评论(0) 推荐(0)
摘要:泛型 为什么要有泛型, 在没有泛型之前, 什么东西充当了泛型的作用? 在泛型出现之前, 代码中会有很多需要强制转换的地方. 比如 int a = (int) object, 对于这样类似的代码, 编译器在编译期间无法确定是否是正确的代码, 只有在真正运行代码期间才会校验出来是否正确. 这种强制转换实 阅读全文
posted @ 2018-07-12 20:35 YanyuWu 阅读(145) 评论(0) 推荐(0)
摘要:在实际编写代码时候 , 会遇到很多场景, 需要将值置成空, 比如发货日期, 有可能是没有. 在没有可空类型之前, 程序都是用 魔值, 即为一个minValue或者常量, 来代表这个值为空, 也有用一个bool值去表示这个值是否真实存在, 但是这些方式都会有很多的缺点, 于是C#2.0加入了可空类型, 阅读全文
posted @ 2018-07-12 20:35 YanyuWu 阅读(166) 评论(0) 推荐(0)
摘要:1. delegate and events http://csharpindepth.com/Articles/Chapter2/Events.aspx 2. 显式类型 和 隐式类型 3. 静态类型, 动态类型 静态类型, 编译时候已经定义好的类型. 动态类型: 编译时候通过动态去检查的类型. 4 阅读全文
posted @ 2018-07-12 20:35 YanyuWu 阅读(166) 评论(0) 推荐(0)
摘要:C#3 引入的扩展方法这一个理念. 扩展方法最明显的特征是在方法参数中第一个参数有this声明. 其实C#库中有很多已经是扩展方法了.比如linq中对序列使用的查询语句, where, select等都是经过扩展的方法. 由于有很多抽象的方法, 比如stream这种, 在很多继承类里面没有完全的达到 阅读全文
posted @ 2018-07-12 20:33 YanyuWu 阅读(142) 评论(0) 推荐(0)
摘要:直接出栗子: 1 class Program 2 { 3 static void Main(string[] args) 4 { 5 foreach (var item in FilterWithoutYield) 6 { 7 Console.WriteLine(item); 8 } 9 Conso 阅读全文
posted @ 2018-06-11 13:38 YanyuWu 阅读(144) 评论(0) 推荐(0)
摘要:将方法作为方法的参数 委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。 将方法绑定到委托 第一次用的“=”,是赋值的语法;第二次,用的是“+=” 阅读全文
posted @ 2018-04-15 23:01 YanyuWu 阅读(163) 评论(0) 推荐(0)