字符串.用户输入时等于

  • 本文关键字:用户 字符串 c#
  • 更新时间 :
  • 英文 :


我已经读了一遍又一遍https://learn.microsoft.com/en-us/dotnet/csharp/how-to/compare-strings和https://learn.microsoft.com/en-us/dotnet/standard/base-types/best-practices-strings我仍然不清楚一件事:对于用户输入的字符串,我应该使用什么比较类型。

IE,假设我在一个支持unicode的数据库记录中有这个字符串,在对数据库运行更新查询之前,我想确保这个字符串实际上已经更改,所以我做了if (string.Equals(dbstring, userinput, StringComparison.?)) { // update db. }

那么我该用哪一个呢?阅读上面的指南,我主要使用StringComparison.CurrentCulture进行UI显示,如排序,我在大多数情况下都使用Ordinal,我应该很少使用InvariantCulture。

让我困惑的是这句话(重点是我的(:

不要使用基于StringComparison.InvariantCulture在大多数情况下。为数不多的例外情况是当你坚持语言上有意义,但文化上不可知的数据。

什么是"持久化"?这适用于在数据库中存储用户输入的unicode字符串的情况吗?

"坚持"在大多数情况下意味着";存储";。仅此而已。意思是简单的事物。

无论是数据库存储、文件存储、互联网云存储,还是内存存储,都无关紧要——尽管";在存储器中";通常与考虑存储并不一致,因为当电源耗尽时,存储往往会蒸发。它更多的是关于你将如何使用这些数据,而不是你将把它存储在哪里;持久化";,如果它在一个典型的非灾难性的情况下保持足够长的时间。

因此,是的,将unicode字符串存储在数据库中正是单词"的好用例;持久化";

--

然而,对于确定用户输入的文本在哪里发生了更改的用例,我不确定您是否应该关注"持久化"方面。在这一点上,我认为你并不真正关心存储,你关心的是";是否已更改";,并且这应当确定字符串比较的选择。

所有StringComparison标志都有一些效果。Culture vs Invariant,区分大小写与否,您希望比较的行为如何,以便结果对用户来说清晰易懂?

如果旧文本是";玛丽有一只小羊;并且新文本是";mAry HaS a Lamb";,应该把它当作一种改变吗?

如果旧文本是";Maria hat ein weißes Lamm";并且新文本是";Maria hat ein weisses Lamm";,应该把它当作一种改变吗?

等等。现在我想不出更好的例子了,我相信你可以在关注你的用户群和对他们最有用的东西时想出一些。

请注意,他们可能也不在乎,你可能想得太多,或者过早地关注太小的细节。也许在最初的几年里,默认的比较会很好,直到用户告诉你们这里和那里可能会更好?不知道YMMV:(

最新更新