如何在c#(CA1307)中使用StringComparison?

时间:2017-05-05 05:29:31

标签: c# visual-studio-2015 string-comparison fxcop

我的目标是省略 author_name 管道开头的数据, author_email pipeline@gmail.com开头如果项目名称以 ej2 Ej2 开头。

我有以下代码。这段代码完全符合我的预期。

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
}

我的FxCop说违反以下方法使用上述方法。

  

严重级代码描述项目文件行抑制状态   警告 CA1307 由于'string.StartsWith(string)'的行为可能因当前用户的语言环境设置而异,因此请调用'getProjectDetailsByApi.DevelopmentBranchStatus(List)'中的此调用,并调用'string。 StartsWith(string,StringComparison)'。如果'string.StartsWith(string,StringComparison)'的结果将显示给用户,例如在列出要在列表框中显示的项列表时,请指定'StringComparison.CurrentCulture'或'StringComparison.CurrentCultureIgnoreCase'作为'StringComparison'参数。如果比较不区分大小写的标识符(如文件路径,环境变量或注册表项和值),请指定“StringComparison.OrdinalIgnoreCase”。否则,如果比较区分大小写的标识符,请指定'StringComparison.Ordinal'。

所以我改变了我的代码,如下所示。但我只得到了

projectName.StartsWith("ej2", StringComparison.OrdinalIgnoreCase) == **true**

但是上面的代码会过滤所有 ej2 项目。但我想仅过滤具有 author_name author_email 管道 pipeline@gmail.com 的项目分别

如果我更改条件List<WebElement> elem =driver.findElements(By.xpath("xpath\to\anchor")); if(elem.size() >0) { System.out.println("Element is present" + elem.get(1).getText(); } 表示,它只提供仅以 ej2 开头的项目。

我该怎么做?

3 个答案:

答案 0 :(得分:0)

如果我理解正确,问题在于您对一个字符串(ej2)进行了不区分大小写的比较,而不是对两个字符串进行区分大小写的比较(使用StringComparison.Ordinal)要过滤的字符串(ej2Ej2)(至少是我从第一个条件到第二个条件的变化)。

这样的东西似乎是原始状态的FxCop安全版本(注意:我使用&#34;不是&#34;运算符(!)而不是== 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...
}

答案 1 :(得分:0)

  

仅在项目中以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
    }
}

答案 2 :(得分:0)

只需用

包装

#pragma warning disable CA1307 // Specify StringComparison

#pragma warning restore CA1307 // Specify StringComparison