VB.NET中选项比较二进制/文本的优缺点

mat*_*mc3 8 vb.net

标准化使用Option Compare Text与Option Compare Binary进行VB.NET开发的优缺点是什么?

---编辑---

只是一些背景,因为它似乎将帮助-我的开发团队已经发现它更容易实现标准化Option Strict On,Option Infer On以及Option Explicit由于对替代品的优势明显.我们没有发现容易标准化的选项比较文本/二进制文件,因为两者似乎都有优点和缺点,不同的开发人员有不同的意见.每一方的一些论点如下:

Option Compare Text的一些优点/参数:

  1. 它通过消除StringComparers和.ToLower()调用以及StringComparison.OrdinalIgnoreCase整个地方的需要来减少代码中的冗长
  2. 数据需求很少涉及套管,大多数数据库都不区分大小写.很少会永远真的要区分THISThisthis时做一个数据比较.
  3. 当您不必担心套管时,某些特定用例更简单.例如,处理ASP.NET控件事件,其中命令被发送到代码隐藏作为字符串和套管问题很难跟踪,因为编译器无法帮助您.认为Select Case对报表<asp:repeater>项目为例.
  4. 提出的关于文本比较的许多问题涉及国际化,这通常与许多应用程序无关.
  5. VB特别是作为一种语言不区分大小写,尽管Visual Studio至少可以帮助您在外壳中强制执行一致性.SQL也不区分大小写.字符串是你唯一需要记住担心它的地方,如果你担心它到处都会突出你通常不会注意到的方式的尴尬.

Option Compare Binary的一些优点/参数:

  1. 与大多数其他语言一样,C#以这种方式工作.具有替代行为并且意外在编程中不好有点意外.
  2. 使用选项比较文本会有轻微的性能损失,这可以通过编译时生成的IL来证明.选项比较二进制没有那个惩罚.
  3. 选项比较文本仅使字符串处理的某些部分不区分大小写.但是,它并不能使字典索引这样的东西默认情况下不区分大小写.因此,它不像选项比较文本实际上使它,所以你根本不必担心套管.如果它只在中途工作,为什么要这么麻烦?
  4. 编程很难.最好不要试图平息这个事实.担心字符串套管是交易的一部分.人类认识THIS不同于ThistHiS.当然你的代码也应该 - 毕竟,它们并不是完全相同的字符串.

所以我真的只是想知道是否还有其他考虑因素.

- 编辑2 -

如果我定义了我认为对此的答案,也许会有所帮助.如果您可以指出任何权威的外部资源,更彻底地讨论这些问题,或指向标准和最佳实践讨论或书籍,提供有关该主题的指导,那肯定会重要.

And*_*per 10

随着Option Compare Text你不需要比较字符串时担心的情况.这可能是一个很大的好处,并且避免将所有内容转换为较低(或较高)的情况,而将comapre转换为字符串相等.

这个角色的另一个地方是字符串的排序. Option Compare Text将像Windows中的文件列表一样排序,但Option Compare Binary将排序为Unix文件列表(所有大写文件名都出现在小写文件名之前).

更新

在阅读了评论和其他答案之后,我想说的Option Compare Binary是从与.Net框架的其余部分保持一致的角度出发.如果字典键等区分大小写,无论Option Compare设置如何,那么在整个代码中默认使用二进制比较只是保持一致.然后,您需要担心的是,对于特定的比较,您是否需要它不区分大小写并为此编写代码.

如果你继续使用,Option Compare Text那么你不仅需要担心是否需要进行特定的比较才能得到大小写(敏感),你还需要了解当前上下文中的默认行为.

然后它成为一个不与其他语言一致的论据,而是与你正在发展的框架的一致性.

  • 究竟.但是当你假设套管无关紧要时,选项比较文字的一个难点就出现了,因为它有很多地方可供选择.例如,默认情况下,字典和集合不区分大小写. (5认同)
  • +1与.Net框架的其余部分保持一致.另外值得注意的是Microsoft Press书[Microsoft Visual Basic和Visual C#Developers的实用指南和最佳实践](http://www.amazon.com/Practical-Guidelines-Practices-Developers-Pro-Developer/dp/0735621721)建议使用`Option Compare Binary`虽然令人恼火,但并不能解释原因 (2认同)

Meh*_*dad 5

使用二进制文件,就像大多数其他语言默认使用的那样,这就是.NET类默认的类型.

弄乱单个单词不应该破坏整个文件.

如果你真的需要文本(通常不是这样),那么只需使用String.CompareString.Equals.