如何在 c# (CA1307) 中使用 StringComparison?
Posted
技术标签:
【中文标题】如何在 c# (CA1307) 中使用 StringComparison?【英文标题】:How to use the StringComparison in c# (CA1307)? 【发布时间】:2017-05-05 05:29:30 【问题描述】:我的目标是省略 author_name 以 pipeline 开头和 author_email 以 pipeline@gmail.com 开头的数据strong> 如果项目名称以 ej2 或 Ej2 开头。
我有以下代码。这段代码完全符合我的预期。
if ((author_name != "pipeline" && author_email != "pipeline@gmail.com") &&
(projectName.StartsWith("ej2") == false || projectName.StartsWith("Ej2") == false))
// some operations
我的 FxCop 说下面的违规使用上面的方法。
严重性代码描述项目文件行抑制状态 警告 CA1307 因为 'string.StartsWith(string)' 的行为可能会因当前用户的区域设置而异,所以将 'GetProjectDetailsByApi.DevelopmentBranchStatus(List)' 中的调用替换为对 'string.开始(字符串,字符串比较)'。如果将向用户显示“string.StartsWith(string, StringComparison)”的结果,例如在对列表框中显示的项目列表进行排序时,指定“StringComparison.CurrentCulture”或“StringComparison.CurrentCultureIgnoreCase”作为“字符串比较”参数。如果比较不区分大小写的标识符,例如文件路径、环境变量或注册表项和值,请指定“StringComparison.OrdinalIgnoreCase”。否则,如果比较区分大小写的标识符,请指定“StringComparison.Ordinal”。
所以我改变了我的代码,如下所示。但我只有
if (author_name.Equals("pipeline", StringComparison.OrdinalIgnoreCase) == false
&& author_email.Equals("pipeline@gmail.com", StringComparison.OrdinalIgnoreCase) == false
&& projectName.StartsWith("ej2", StringComparison.OrdinalIgnoreCase) == false)
//mY code
但上面的代码过滤了所有 ej2 项目。但我只想过滤具有 author_name 和 author_email 的项目是 pipeline 和 pipeline@gmail.com分别。
如果我更改条件projectName.StartsWith("ej2", StringComparison.OrdinalIgnoreCase) == **true**
意味着,它只给出仅启动ej2的项目。
我该怎么做?
【问题讨论】:
【参考方案1】:仅在Ej2或ej2开头的项目中省略author_name = pipeline和author_email = pipeline@gmail.com的数据
试试这个:
if(!author_name.Equals("pipeline",StringComparison.InvariantCultureIgnoreCase) && !author_email.Equals("pipeline@gmail.com ",StringComparison.InvariantCultureIgnoreCase))
if(projectName.StartsWith("Ej2", StringComparison.InvariantCultureIgnoreCase))
// do Your Operations
【讨论】:
也可以使用StringComparison.OrdinalIgnoreCase【参考方案2】:如果我对您的理解正确,问题是您正在对一个字符串 (ej2
) 进行不区分大小写的比较,而不是对两个字符串 (ej2
和Ej2
) 您想要过滤的内容(至少这是我从您的第一个条件到第二个条件的变化)。
这样的东西看起来像是原始条件的 FxCop 安全版本(注意:我使用“not”运算符 (!
) 而不是 == false
来节省一些输入):
if (!author_name.Equals("pipeline", StringComparison.OrdinalIgnoreCase)
&& !author_email.Equals("pipeline@gmail.com", StringComparison.OrdinalIgnoreCase)
&& !projectName.StartsWith("ej2", StringComparison.Ordinal)
&& !projectName.StartsWith("Ej2", StringComparison.Ordinal))
// do something here...
【讨论】:
感谢您的回复。但是这个条件过滤了所有以 ej2 开头的项目。但是我需要像如果项目名称以 ej2 或 Ej2 开头并且 author_name 是 pipeline 而 author_email 是 pipeline@gmail.com 表示我不需要这些数据。 我的意思是,我需要省略只有在项目中以 Ej2 或 ej2 开头的 author_name = pipeline 和 author_email = pipeline@gmail.com 的数据 我的回答中的这个条件(是)你所说的原始条件的复制品,除了它添加了StringComparison
部分。但是,我已更新代码以将 ||
更改为 &&
。原因是,对于所有项目,最后两个条件(组合在一起)将始终评估为 true
。如果项目名称是"ej2"
,那么对"Ej2"
的第二次检查将为真。由于false || true == true
,那么无论名称如何,最后一组条件都没有做任何事情。我唯一的问题是,你展示的第一个怎么可能是你想做的?【参考方案3】:
用
包起来#pragma warning disable CA1307 // Specify StringComparison
和#pragma warning restore CA1307 // Specify StringComparison
【讨论】:
谢谢,我一直在寻找这个,因为我无法在 Linq to Entity 中使用 StringComparisson以上是关于如何在 c# (CA1307) 中使用 StringComparison?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 c# 以编程方式在 domino 服务器中获取 CA 配置的验证者名称列表?
如何在 wix 屏幕/对话框之间插入 C# CA 屏幕/表单