c# - 使用 String.ToUpperInvariant() 规范化字符串

标签 c# asp.net sql-server asp.net-membership code-analysis

我目前正在我的 SQL Server 数据库中以小写形式存储标准化版本的字符串。例如,在我的 Users 表中,我有一个 UserName 和一个 LoweredUserName 字段。根据上下文,我使用 T-SQL 的 LOWER() 函数或 C# 的 String.ToLower() 方法生成用户名的小写版本以填充 LoweredUserName 字段。根据Microsoft's guidelinesVisual Studio's code analysis rule CA1308 ,我应该使用 C# 的 String.ToUpperInvariant() 而不是 ToLower()。根据 Microsoft 的说法,这既是性能问题又是全局化问题:转换为大写字母是安全的,而转换为小写字母可能会导致信息丢失(例如,the Turkish 'I' problem)。

如果我转向使用 ToUpperInvariant 进行字符串规范化,我也将不得不更改我的数据库架构,因为我的架构基于 Microsoft's ASP.NET Membership框架(参见 this related question ),它将字符串规范化为小写。

Microsoft 告诉我们在 C# 中使用大写规范化,而它自己的成员表和过程中的代码却使用小写规范化,这不是自相矛盾吗?我应该将所有内容都切换为大写规范化,还是继续使用小写规范化?

最佳答案

根据 CA1308 ,这样做的原因是某些字符无法从大写字母往返转换为小写字母。重要的是你总是朝着一个方向移动,所以如果你的标准是总是移动到小写那么就没有理由改变它。

关于c# - 使用 String.ToUpperInvariant() 规范化字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/773703/

相关文章:

SQL - 如果包含这些其他记录,则包含此记录

C# 返回组合异常

c# - 在 C# 中将 mysql 读取器结果转换为字符串会引发异常

c# - ASP.NET C# 网络摄像头集成

c# - Sql Server临时表消失

sql - 数据库中聊天消息和评论的典型长度是多少?

c# - 调试键盘事件,如 'Ctrl+Up Arrow'

c# - 如何在用户控件之间进行通信

asp.net - 引用如何在 ASP.NET WebForms 网站(而不是 Web 应用程序)中工作?

asp.net - 使用ninject时出现异常