簡體   English   中英

用戶輸入的 String.Equals

[英]String.Equals on User Input

我已經閱讀並重新閱讀了 https://docs.microsoft.com/en-us/dotnet/csharp/how-to/compare-stringshttps://docs.microsoft.com/en-us/dotnet/標准/基本類型/最佳實踐字符串,我仍然不清楚一件事:我應該為用戶輸入的字符串使用什么比較類型。

IE,假設我在支持 unicode 的數據庫記錄中有字符串,並且在對數據庫運行更新查詢之前,我想確保字符串實際上已經更改,所以我這樣做if (string.Equals(dbstring, userinput, StringComparison.?)) { // update db. } 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”而新文本是“mary HaS a Lamb”,是否應該將其視為更改?

如果舊文本是“Maria hat ein weißes Lamm”而新文本是“Maria hat ein weisses Lamm”,是否應該將其視為更改?

等等。 現在我想不出更好的例子,我相信當你關注你的用戶群以及什么對他們最有用時,你會想到一些。

請注意,他們也可能不在乎,您可能會想太多或過早關注太小的細節。 也許默認比較在最初幾年會很好,直到用戶告訴你它可能會在這里和那里更好? 不知道。 YMMV:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM