string body = Selenium.GetBodyText(); if (body.Contains("software", StringComparison.CurrentCultureIgnoreCase)) { //do something } I get a string does not contain a definition for Contains message when I do the above. What am I doing wrong here? Thanks in advance everyone!I am trying to check if body has the string "software", "Software" or "SOFTWARE". body will contain paragraphs and paragraphs of text (string).
10 Réponses :
Je ne sais pas si vous utilisez .NET 1.1, mais il n'a pas contenu la méthode contient code>. Vous devez utiliser
indexof code>. .NET 2.0 Ajout de la méthode contient (par msdn) . Avec index de, vous pouvez utiliser StringComparison . P>
Je ne crois pas string code> a une surcharge de
contient code>
prendre un stringcomparison code>. Cependant, vous pouvez utiliser
indexofof code> qui fait :
if (body.IndexOf("software", StringComparison.CurrentCultureIgnoreCase) != -1)
Le message d'erreur ne serait-il pas indiqué qu'il utilise un cadre plus ancien? Il semble que le message d'erreur soit différent si la signature de la méthode était fausse.
@ 0A0D: bon point - il devrait être "Aucune surcharge pour la méthode ne contient de 2 arguments". Je suppose que nous verrons ce que Maya dit :)
@Maya Une autre possibilité serait d'étendre la classe code> string code> avec une méthode d'extension à l'aide du code comme ci-dessus. Vous créeriez essentiellement votre propre surcharge.
@Maya: Je suis désolé Maya, j'espère que vous n'êtes pas offensé. C'était censé comme généralité.
Le corps est une corde, et quand je fais du corps.Contains, je vois 3 surcharges - une prenant de char, une autre chaîne de prise et la dernière prenant de charcuterie avec StringComparison. Vous avez raison JON. Merci! Je ne sais pas comment vérifier la version de quel cadre j'utilise.Je vais essayer d'utiliser indexof.
@ 0A0D: C'est bon :) Je ne suis pas offensé. Merci d'essayer de m'aider :)
@Maya: Je ne vois pas les trois surcharges dont vous parlez. Quel est l'IDE? Dans VS 2010, je vois que la norme contient la méthode (String) et une autre en utilisant iEnumerable.
Du code qui a été collé, vous déclarez une variable "corps" de chaîne de type et à l'aide d'une autre variable "Bodytext" qui est non déclaré. P>
chaîne n'a pas de méthode contenant cette signature. Str.contains (chr, stringcomparison), pas str.contains (String, StringComparison) ... P>
String.Contains Ne prenez qu'un seul paramètre - votre code doit être
bodyText.Contains("software");
contient code> n'a qu'un seul paramètre - la chaîne qu'il s'agit de comparer. Voulez-vous dire,
égale code> qui prend un
stringcomparison code>? P>
Vous pouvez toujours utiliser Contient à condition que vous le comparez après la conversion en même cas (supérieur ou inférieur)
par exemple: p>
Pas une bonne idée, en raison de la façon dont certaines cultures gérent le boîtier supérieur. Par exemple, "mail" .toupper (). Contient ("Mail") code> peut ne pas retourner vrai.
merci skeet.didn pense. Pourquoi ne pas convertir l'argument aussi en majuscule et en comparant. ("Samplestring" .ttoupper (). Contient ("Samplestring" .ttoupper ()))
Je ne suis même pas sûr de savoir si cela fonctionnera. Fondamentalement, effectuer une correspondance insensible à une casse idéale ne devrait pas impliquer la conversion, à ce jour au courant.
Vous pouvez utiliser une expression régulière pour correspondre à une recherche de chaîne dans C #. Vous avez également la possibilité d'ignorer l'affaire. Ce lien peut être utile: Comment: Cordures de recherche utilisant des expressions régulières (Guide de programmation C #) P> P>
Eh bien, vous pouvez toujours faire une méthode d'extension (si vous utilisez .NET 3.5 ou plus):
public static class StringExtensions { /// <summary> /// Returns a value indicating whether the specified String object /// occurs within this string. /// </summary> /// <param name="str">string object being extended</param> /// <param name="value">string object to check for</param> /// <param name="comparer">StringComparer to use</param> public static bool Contains(this string str, string value, StringComparer comparer) { StringComparison comparison; if (comparer == StringComparer.CurrentCulture) comparison = StringComparison.CurrentCulture; else if (comparer == StringComparer.CurrentCultureIgnoreCase) comparison = StringComparison.CurrentCultureIgnoreCase; else if (comparer == StringComparer.InvariantCulture) comparison = StringComparison.InvariantCulture; else if (comparer == StringComparer.InvariantCultureIgnoreCase) comparison = StringComparison.InvariantCultureIgnoreCase; else if (comparer == StringComparer.Ordinal) comparison = StringComparison.Ordinal; else if (comparer == StringComparer.OrdinalIgnoreCase) comparison = StringComparison.OrdinalIgnoreCase; else comparison = StringComparison.Ordinal; if (str.IndexOf(value, comparison) != -1) return true; else return false; } }
Je suis très tard à cette fête, mais j'espère que je peux sauver quelqu'un du trou que j'étais juste dans. p>
avec .NET CORE 2.1 Surcharge GRIP: MSFT pourrait garder le sélecteur de cadre à un endroit sur le page Documents API ? Utilisé pour être haut et centre et le "s'applique à" est très trompeur. P> Comparer (String, StringComparison) Code> a été mis à disposition. Dès cette écriture, si vous utilisez .NET Framework ou une version antérieure de Core, vous devrez utiliser une solution différente de gisement ici. P>
Vous avez un corps de cordes, puis utilisez Bodytext, s'il n'est pas une faute de frappe, la déclaration de BodyText
Oups ... Désolé ... c'est une erreur. Laissez-moi le réparer rapidement