使用Option Compare Text与Option Compare Binary进行VB.NET开发的标准化有哪些优缺点?
---编辑---
只是一些背景,因为它似乎会有所帮助 - 我的开发团队发现在Option Strict On
,Option Infer On
和Option Explicit
上标准化要容易得多,因为它们比备择方案。我们没有发现容易标准化的选项比较文本/二进制文件,因为两者似乎都有优点和缺点,不同的开发人员有不同的意见。每一方的一些论点如下:
Option Compare Text的一些优点/参数:
StringComparer
和.ToLower()
来电和StringComparison.OrdinalIgnoreCase
的需求,减少了代码中的详细程度THIS
和This
以及this
。Select Case
事件的<asp:repeater>
语句为例。Option Compare Binary的一些优点/参数:
THIS
与This
和tHiS
不同。当然你的代码也应该 - 毕竟,它们并不是完全相同的字符串。所以我真的只是想知道是否还有其他考虑因素。
- 编辑2 -
如果我定义了我认为对此的答案,也许会有所帮助。如果您可以指出任何权威的外部资源,更彻底地讨论这些问题,或者指向标准和最佳实践讨论或书籍,提供有关该主题的指导,那肯定会很重要。
答案 0 :(得分:10)
使用Option Compare Text
时,您无需担心比较字符串时的情况。这可能是一个很大的好处,并且避免将所有内容转换为较低(或较高)的情况,以便将字符串相等转换为comapre。
这个角色扮演的另一个地方是字符串的排序。 Option Compare Text
将与Windows中的文件列表类似,但Option Compare Binary
将排序为Unix文件列表(所有大写文件名都出现在小写文件名之前)。
<强>更新强>
在阅读了评论和其他答案之后,我想说Option Compare Binary
是从与.Net框架的其余部分保持一致的角度出发的方式。如果字典键等区分大小写,无论Option Compare
设置如何,那么在整个代码中默认使用二进制比较就是一致的。然后,您需要担心的是,对于特定的比较,您是否需要它不区分大小写并为此编写代码。
如果你选择Option Compare Text
,那么你不仅需要担心是否需要进行特定的比较才能保持敏感,你还需要了解当前的默认行为上下文。
然后它成为一个不与其他语言保持一致的论据,而是与你正在发展的框架保持一致。
答案 1 :(得分:5)
使用二进制文件,就像大多数其他语言默认使用的一样,这就是.NET类默认的。
弄乱单个单词不应该破坏整个文件。
如果确实需要文字(通常不是),请使用String.Compare
或String.Equals
。
答案 2 :(得分:2)
如果需要执行大量不区分大小写的比较,请编写一个带有一些简洁命名辅助方法的模块,并将其包含在项目中。虽然CaseInsenstiveEquals(S1, S2)
或(使用扩展方法)S1.CaseInsensitiveEquals(S2)
比S1 = S2
更冗长,但许多应用程序需要区分大小写和不区分大小写的比较。使用equals运算符报告包含不同字符序列的相等字符串将增加区分大小写的比较的详细程度。此外,有许多方法可以执行不区分大小写的比较。如果使用辅助方法,该方法的代码将精确地揭示它使用的方法。相比之下,如果使用Option Compare Text
,那么要知道如何处理所有不同的角落情况将会更加困难。
答案 3 :(得分:1)
SQL不区分大小写,但LINQ中的查询是。它是一些内部错误的来源。
解决方案不是将密钥用于文本。必要时,确保db中的大小写是一致的。最后,如果无法做到这一点,只需根据需要使用tolower。除非需要,否则我不会建议使用tolower,因为这确实让代码变得丑陋。