在 C# 中 (x == X) 何时成立?
这个问题初看起来很奇怪,C#就是C#啊,一门严谨的语言,并且字符串是区分大小写的,无论是在什么情况下都有("x" != "X"),这才叫做一致性嘛。事实上,这在以前一直都是成立的,直到.NET Framework 3.5引入了Linq to Sql,这种一致性就被破坏掉了,变成依赖于环境配置了。
想象一下我们对一个Linq to Sql的DataObject编写一个Linq查询,并且where子句包括("x" == "X"),那么该子句会返回true还是false呢?事实上,该查询虽然是一个用C#编写的lamda表达式,然而并不编译为MSIL。Linq to Sql里面的Linq是直接编译为SQL语句的,因此("x" == "X")会直接变成SQL里面的("x" = "X")。那么这就为true了?也不对,因为大小写是否敏感是基于数据库配置的,在当前的应用程序连接上特定的数据库之前,这个问题的答案都是不确定的。
那么我们可否选择使用String.Compare()来强制设置是否大小写敏感?这在Linq to Object中没问题,在Linq to Sql中就不行了,因为String.Compare()无法编译为SQL语句。因此,在Linq to Sql中,大小写是否敏感是一个依赖于环境配置的,这就提高了编码过程中由于疏忽而造成问题的概率。
为什么这样说呢?在以前,我们的C#代码和SQL代码是分开书写的,写C#的时候就很明确大小写敏感,写SQL的时候就很明确是数据库相关的。然而现在部分的SQL逻辑改为用C#来编写了,问题就出现了,特别是当你的代码中还混杂有Linq to Object的查询时,编写代码与阅读代码的过程中你一看到Linq就先要去想这段lamda表达式最终会被编译为哪种语言,MSIL还是SQL。如果你不进行这个区分,或者开小差把Linq to Sql的代码当作Linq to Object了,这就可能导致你编写了错误的代码,或者阅读上造成了错误的理解。
总体而言,虽然Linq to Sql为开发(特别是RAD)带来了巨大的便捷性,然而这种C#与SQL混合编写并且都使用C#语法的功能将会是一种先天的不足,它所带来的代码维护成本可能随着项目体积逐步增大而慢慢体现出来。至于将SQL混入C#所造成的分层模糊现象,我将在以后的文章中讨论,敬请关注:
- Cat in Chinese (feed)
- Cat in dotNET (feed)
在 C# 中 (x == X) 何时成立?相关推荐
- 无穷小微积分吁呼中俄数学中心成立!
我们吁呼的理由是,俄罗斯数学家与我们志同道合,倡导非标准分析. 请见无穷小微积分网站首页俄罗斯"无穷小分析". 袁萌 陈启清 6月30日 附件: 中俄数学中心成立 6 ...
- 星辰天合与中飞院合作 成立“民航高性能数据分析与存储联合实验室”
近日,星辰天合与中国民航飞行学院(以下简称"中飞院")宣布合作成立"民航高性能数据分析与存储联合实验室"(以下简称"存储实验室"),并由星辰 ...
- 深度学习中的注意力机制(一)
作者 | 蘑菇先生 来源 | NewBeeNLP 头图 | CSDN下载自视觉中国 目前深度学习中热点之一就是注意力机制(Attention Mechanisms).Attention源于人类视觉系统 ...
- 如何正确的使用Java8中的Optional类来消除代码中的null检查
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:一书生VOID lw900925.github.io/jav ...
- 深度学习中的激活函数总结
https://www.toutiao.com/a6678603633816240653/ 从定义来讲,只要连续可导的函数都可以作为激活函数,但目前常见的多是分段线性和具有指数形状的非线性函数. Si ...
- 小程序 - 效果处理之技巧合集(更新中...)
巧用Console.log(event) Event::事件对象,方法在执行的时候,当前环境携带的一些信息 可以打印出来.获取很多信息,根据这些信息再度寻找你需要的信息的路径.如小程序里的event. ...
- [转]深刻理解Python中的元类(metaclass)
类也是对象 在理解元类之前,你需要先掌握Python中的类.Python中类的概念借鉴于Smalltalk,这显得有些奇特.在大多数编程语言中,类就是一组用来描述如何生成一个对象的代码段.在Pytho ...
- 理解LSTM/RNN中的Attention机制
转自:http://www.jeyzhang.com/understand-attention-in-rnn.html,感谢分享! 导读 目前采用编码器-解码器 (Encode-Decode) 结构的 ...
- Computer Science Theory for the Information Age-3: 高维空间中的高斯分布和随机投影
Computer Science Theory for the Information Age-3: 高维空间中的高斯分布和随机投影 高维空间中的高斯分布和随机投影 (一)在高维球体表面产生均匀分布点 ...
最新文章
- Python3中对Dict的内存优化
- maven显示1.5版本过期的解决办法
- 【数据仓库】Hive环境搭建和基础用法
- vue-cli3中安装lib-flexible和px2rem
- tf 如何进行svd_Tensorflow快餐教程(6) - 矩阵分解
- flexbox布局_Flexbox vs Grid-如何构建最常见HTML布局
- Qt creator5.7 OpenCV249之图片膨化(含源码下载)
- ctypealpha php_php中Ctype函数用法详解
- The Learning route of GNN
- matlab 图像分块及恢复
- Mac终端文件类型显示不同颜色
- 看雪论坛论坛小测试的答案
- eclipse tomcat找不到或无法加载
- [c++期末刷题]将 1 元钱换成 1 分、2 分、5 分的硬币
- 【科学文献计量】知识单元的频次统计与分布(简单阅览和完整频次统计)
- 知足而乐,不知足亦乐
- 中国民营企业的8+10种死法
- 谁能做文字版人生模拟器
- python生成图形验证码_python生成图片验证码
- 用聚类算法计算股票的支撑位和阻力位
热门文章
- FPGA之道(77)静态时序分析(三)同步时序逻辑的分析原理
- TOJ_1003题解
- 安全牛:“新一代SOC研究报告”之市场指南及技术指南点评
- SSL只是基本安全措施
- 崔强:如果有知识就做一个内裤外穿飞行的超人
- Visual C++2005库的十项突破性变化
- ASP.NET AJAX示例程序:实现IDragSource和IDropTarget接口将商品拖放至购物车中
- NHibernate使用时,不能返回自己的异常的解决办法
- 高校复试计算机英语文献翻译,专业文献英语翻译复试.pdf
- python用Levenshtein计算文本相似度