喜欢c#, 所以期望也比较高, 也就会留意一些不起眼的小缺陷, 也就会有很多改进的设想, 也就希望能和更多的朋友分享这些发现和畅想.

(1)明确赋值检查缺陷

截止到目前的MS C#4.0版编译器为止, 关于明确赋值检查都存在一个令人不爽的诡异问题, 而且也与ECMA标准不一致. 如下例所示:

class DefinitelyAssignedTest
{private static void CheckA(){int value;if (Maybe() && Expr(out value)){Console.WriteLine(value); //OK}} private static void CheckB(){int value;if (false && Expr(out value)){Console.WriteLine(value); //Error}}private static void CheckC(){int value;if (false && Expr(out value) && Expr(out value)){Console.WriteLine(value); //OK}}private static void CheckD(){int value;bool temp;if (temp = (Maybe() && Expr(out value))){Console.WriteLine(value); //Error}}static bool Expr(out int value){value = 1;return true;}static bool Maybe(){return (Environment.TickCount & 1) == 0;}
}

其中仅有A和C是能编译通过的, 而B和D不行. 而事实上这4个例子都是"明确赋值"的, 而且按照ECMA标准也都应该是"明确赋值"的. 但当前编译器的实现却有着自己诡异的规则.

虽然这对手写的代码不会带来什么问题, 换个写法就是了, 可是对于代码生成器来说, 却着实添了不少乱. 就想稀世的脸上落了只苍蝇, 无伤大雅, 但确实让人很不爽.

09年6月我把这个问题反馈给了微软, 9月份有了解决方案......实现没改, 没问题,语言标准改了...这样就没有不一致了... 打哪指哪, 先射箭后画靶嘛.

相关链接:https://connect.microsoft.com/VisualStudio/feedback/details/468882/definitely-assigned-after-true-expression-detection-works-improperly#

如果您也喜欢C#语言, 并且发现了问题或有建议, 请反馈给开发者们, 让他们能做的更好.

转载于:https://www.cnblogs.com/robird/archive/2010/06/24/1764374.html

吹毛求疵C#(1)明确赋值检查缺陷相关推荐

  1. Java代码缺陷自动分析工具介绍

    Java代码缺陷自动分析工具介绍                                                                                     ...

  2. 《C++面向对象高效编程(第2版)》——3.4 赋值操作符

    本节书摘来自异步社区出版社<C++面向对象高效编程(第2版)>一书中的第3章,第3.4节,作者: [美]Kayshav Dattatri,更多章节内容可以访问云栖社区"异步社区& ...

  3. strcpy函数_错误更正(拷贝赋值函数的正确使用姿势)

    这是一篇对什么是C++的The Rule of Three的错误更正和详细说明. 阅读时间7分钟.难度⭐⭐⭐ 虽然上一篇文章的阅读量只有凄惨的两位数,但是怀着对小伙伴负责的目的,必须保证代码的正确性. ...

  4. 静态代码检查工具简介

    静态代码检查工具简介 在 Java 软件开发过程中,开发团队往往要花费大量的时间和精力发现并修改代码缺陷.传统的代码复审.同行评审,通过人工方式来检查缺陷仍然是一件耗时耗力的事情.Java 静态代码分 ...

  5. 软件测试——功能测试(缺陷)2

    功能测试--缺陷 缺陷 1.定义: 2.缺陷知识点 3.缺陷编写 3.1 缺陷报告示例 3.2 缺陷的跟踪流程 3.3 提交缺陷注意事项 3.4编写规范 3.5 缺陷类型 3.6 工作流程 4.缺陷管 ...

  6. DevOps系列之 —— 持续开发与集成(六)静态代码检查

    DevOps系列之 -- DevOps概览(一)软件产业和交付模式发展趋势 DevOps系列之 -- DevOps概览(二)新型软件技术及交付模式 DevOps系列之 -- DevOps概览(三)De ...

  7. Checkstyle检查规则

    Checkstyle是一个检查java文件编码规范的开源工具,最新版本支持184个检查规则. Checkstyle官网如下: https://checkstyle.sourceforge.io Che ...

  8. 软件测试基础(三)—— 缺陷判断标准、缺陷管理流程、缺陷工具推荐

    学习目标 1.能够说出软件缺陷判定标准: 2.能够说出项⽬中缺陷的管理流程: 3.能够使⽤Excel对于缺陷进⾏管理: 4.能使⽤⼯具管理缺陷. 一.缺陷 1.定义 软件中存在的各种问题,都为缺陷,简 ...

  9. 软件测试——缺陷(缺陷的基本概、缺陷的生命周期、缺陷的识别)

    缺陷 一.缺陷的基本概述 1.缺陷的定义 软件未实现产品说明书要求的功能 软件出现了产品说明书指明不应该出现的功能 软件实现了产品说明书未提到的功能 软件未实现产品说明书虽未明确提及但应该实现的目标 ...

最新文章

  1. Java并发学习一:CPU缓存导致的可见性问题带来的并发Bug
  2. 贪心算法-跳跃游戏——b
  3. druid mysql配置详解_druid配置详解
  4. 最优二叉树——哈夫曼树
  5. 解析并验证IE6及之前版本的'!important’ BUG(转)
  6. excel图片地址直接显示图_图片转表格基于百度AI
  7. java action上传文件_java实现文件上传
  8. openssl 对文本加密解密
  9. Linux start-kernel
  10. 计算机音乐植物大战僵尸泳池,植物大战僵尸(泳池)
  11. 项目vue2.0仿外卖APP(五)
  12. 自己动手写crud+分页 出现问题
  13. MATLAB 积分 上限为变量,matlab 求定积分,积分的上限是变量,函数带有其他参数
  14. 基于wincc的虚拟电梯设计_基于WinCC的电梯PLC控制仿真.doc
  15. chrome浏览器使用
  16. Unity 涂涂乐(不使用shader)
  17. 「 iOS 知识小集 」2018 · 第 24 期
  18. a+b+c+d==0
  19. 简述GPS,GSM,GPRS和GNSS的名称区别
  20. 如何利用CRM进行规范化商机管理?

热门文章

  1. LeetCode 2176. 统计数组中相等且可以被整除的数对
  2. LeetCode 1657. 确定两个字符串是否接近
  3. LeetCode 683. K 个空花盆(set/滑动窗口)
  4. LeetCode 519. 随机翻转矩阵(哈希)
  5. php实现文字向左跑马灯,js实现文字跑马灯效果
  6. 写一个函数取出php,写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名...
  7. 机器学习回归算法—岭回归及案例分析
  8. django简介及环境搭建
  9. java子类继承父类实际_java子类继承父类,是否生成父类对象?
  10. Java应用性能调优工具介绍及实践