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

How to use the StringComparison in c# (CA1307)?

我的目标是省略 author_namepipeline[=55 开头的数据=]pipeline@gmail.com开头 如果项目名称以ej2Ej2开头.

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

if ((author_name != "pipeline" && author_email != "pipeline@gmail.com") && 
    (projectName.StartsWith("ej2") == false || projectName.StartsWith("Ej2") == false))
{
  // some operations
}

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

Severity Code Description Project File Line Suppression State Warning CA1307 Because the behavior of 'string.StartsWith(string)' could vary based on the current user's locale settings, replace this call in 'GetProjectDetailsByApi.DevelopmentBranchStatus(List)' with a call to 'string.StartsWith(string, StringComparison)'. If the result of 'string.StartsWith(string, StringComparison)' will be displayed to the user, such as when sorting a list of items for display in a list box, specify 'StringComparison.CurrentCulture' or 'StringComparison.CurrentCultureIgnoreCase' as the 'StringComparison' parameter. If comparing case-insensitive identifiers, such as file paths, environment variables, or registry keys and values, specify 'StringComparison.OrdinalIgnoreCase'. Otherwise, if comparing case-sensitive identifiers, specify '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_nameauthor_email 的项目是 pipelinepipeline@gmail.com 分别。

如果我改变条件 projectName.StartsWith("ej2", StringComparison.OrdinalIgnoreCase) == **true** 意味着,它只给出只启动的项目 ej2.

我该怎么做?

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

像这样的东西看起来像是原始条件的 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...
}

Omit the data which have author_name = pipeline and author_email = pipeline@gmail.com only in the project starts with Ej2 or ej2

试试这个:

if(!author_name.Equals("pipeline",StringComparison.InvariantCultureIgnoreCase) && !author_email.Equals("pipeline@gmail.com ",StringComparison.InvariantCultureIgnoreCase))
{
    if(projectName.StartsWith("Ej2", StringComparison.InvariantCultureIgnoreCase))
    {
        // do Your Operations
    }
}

包裹起来

#pragma warning disable CA1307 // Specify StringComparison

#pragma warning restore CA1307 // Specify StringComparison