2017-05-05 3 views
0

Mon but est d'omettre les données qui author_name commence par pipeline et author_email commence par [email protected] Si le nom du projet commence par EJ2 ou Ej2.Comment utiliser la StringComparison dans C# (CA1307)?

J'ai sous le code. Ce code a parfaitement fonctionné à mes attentes.

if ((author_name != "pipeline" && author_email != "[email protected]") && 
    (projectName.StartsWith("ej2") == false || projectName.StartsWith("Ej2") == false)) 
{ 
    // some operations 
} 

Mon FxCop a dit à la violation ci-dessous d'utiliser la méthode ci-dessus.

Code de gravité Description du projet État Suppression de la ligne de fichier Avertissement CA1307 Parce que le comportement de « string.StartsWith (string) » peut varier en fonction des paramètres régionaux de l'utilisateur actuel, remplacer cet appel dans « GetProjectDetailsByApi.DevelopmentBranchStatus (List) 'avec un appel à' string.StartsWith (string, StringComparison) '. Si le résultat de 'string.StartsWith (string, StringComparison)' sera affiché à l'utilisateur, comme lors du tri d'une liste d'éléments à afficher dans une zone de liste, spécifiez 'StringComparison.CurrentCulture' ou 'StringComparison.CurrentCultureIgnoreCase' comme Paramètre "StringComparison". Si vous comparez des identificateurs insensibles à la casse, tels que les chemins d'accès aux fichiers, les variables d'environnement ou les clés et valeurs de registre, spécifiez 'StringComparison.OrdinalIgnoreCase'. Sinon, si vous comparez des identificateurs sensibles à la casse, spécifiez 'StringComparison.Ordinal'.

J'ai donc changé mon code comme ci-dessous. Mais je suis seulement

if (author_name.Equals("pipeline", StringComparison.OrdinalIgnoreCase) == false 
    && author_email.Equals("[email protected]", StringComparison.OrdinalIgnoreCase) == false 
    && projectName.StartsWith("ej2", StringComparison.OrdinalIgnoreCase) == false) 
{ 
    //mY code 
} 

Mais au-dessus de filtre de code tout EJ2 projet. Mais je veux filtrer seulement le projet qui ont le author_name et author_email est pipeline et [email protected] respectivement.

Si je change la condition projectName.StartsWith("ej2", StringComparison.OrdinalIgnoreCase) == **true** signifie, Il donne seulement le projet qui commence seulement ej2.

Comment puis-je faire?

Répondre

0

Si je vous comprends bien, le problème est que vous faites une comparaison insensible à la casse sur une chaîne (ej2) au lieu d'un cas de comparaison sensible (en utilisant StringComparison.Ordinal) sur les deux chaînes (ej2 et Ej2) que vous voulez filtrer (au moins c'est le changement que je vois de votre première à la deuxième condition).

Quelque chose comme cela semble être une version FxCop-sûre de votre état d'origine (Remarque: je l'opérateur « et non » (!) au lieu de == false pour économiser quelques):

if (!author_name.Equals("pipeline", StringComparison.OrdinalIgnoreCase) 
    && !author_email.Equals("[email protected]", StringComparison.OrdinalIgnoreCase) 
    && !projectName.StartsWith("ej2", StringComparison.Ordinal) 
    && !projectName.StartsWith("Ej2", StringComparison.Ordinal)) 
{ 
    // do something here... 
} 
+0

Merci pour votre réponse. Mais cette condition filtrait tout le projet qui commence par ej2. Mais j'ai besoin de filtrer comme si le nom du projet commence par ej2 ou Ej2 et nom_auteur est pipeline et que author_email est [email protected] signifie que je n'ai pas besoin de ces données. –

+0

Je veux dire, je dois omettre les données qui ont author_name = pipeline et author_email = [email protected] seulement dans le projet commence par Ej2 ou ej2 –

+0

Cette condition dans ma réponse (était) une réplique de l'original que vous avez dit était fonctionne, sauf que les parties 'StringComparison' sont ajoutées. Cependant, j'ai mis à jour le code pour changer le '||' à '&&'. La raison en est que, pour tous les projets, les deux dernières conditions (qui ont été regroupées) seront toujours évaluées à "vrai". Si un nom de projet est '" ej2 "', alors la seconde vérification de '" Ej2 "' sera vraie. Depuis 'false || true == true', peu importe le nom, le dernier ensemble de conditions ne fait rien. Ma seule question est, comment est-il possible que le premier que vous avez montré faisait ce que vous vouliez? –

0

Omettre les données qui ont author_name = pipeline et author_email = pipeline @ gmail.com que dans le projet commence par Ej2 ou EJ2

Essayez ceci:

if(!author_name.Equals("pipeline",StringComparison.InvariantCultureIgnoreCase) && !author_email.Equals("[email protected] ",StringComparison.InvariantCultureIgnoreCase)) 
{ 
    if(projectName.StartsWith("Ej2", StringComparison.InvariantCultureIgnoreCase)) 
    { 
     // do Your Operations 
    } 
} 
+0

Vous pouvez également utiliser StringComparison.OrdinalIgnoreCase –