web-dev-qa-db-fra.com

Nouvelle ligne en erreur constante

J'écris un code c # dans lequel je récupère des valeurs de la base de données et l'utilise. Le problème auquel je suis confronté est le suivant.

Si ma valeur récupérée dans la base de données est:

 string cat1 = "sotheby's";

maintenant, en utilisant ce chat, je veux insérer un caractère d'échappement avant la citation simple, pour y parvenir, j'ai écrit le code ci-dessous:

  string cat1 = "sotheby's";
                    if (cat1.Contains("'")) {
                        var indexofquote = cat1.IndexOf("'");
                        cat1.Insert(indexofquote-1,"\");
                        var cat2 = cat1;
                    }

L'erreur augmente dans la ligne d'insertion, la barre oblique inverse (caractère d'échappement). L'erreur est New Line in Constant. Veuillez m'aider à corriger cette erreur.

26
Furquan Khan

Vous ne pouvez pas simplement écrire "\" en code C #. Cela produira l'erreur "Nouvelle ligne en constante" car elle "échappe" à la deuxième citation pour qu'elle ne compte pas. Et la chaîne n'est pas fermée.

Utilisez soit "\\" (échappant au \ avec lui-même)
Ou utiliser @"\" (une chaîne textuelle).

39
Henk Holterman

La barre oblique inverse dans les chaînes de caractères est un caractère d'échappement, il doit donc être échappé lui-même:

"\\"

Ou vous pouvez utiliser un soi-disant littéral de chaîne verbatim:

@"\"

Voir: http://msdn.Microsoft.com/en-us/library/aa691090.aspx

Concernant votre erreur de compilation: la barre oblique inversée échappe au guillemet suivant, ainsi le littéral de chaîne n'est pas reconnu comme fermé. Les caractères suivants) et; sont valides pour les littéraux de chaîne, mais la fin de ligne (nouvelle ligne) ne l'est pas. D'où l'erreur.

2
nodots

Cela ne remplacera qu'un seul devis. Pour les obtenir tous, utilisez:

string cat1_escaped = cat1.Replace("'", "\'");

Bien que beaucoup de bases de données n'échappent pas à des citations comme ça, mais plutôt en les doublant:

string cat1_escaped = cat1.Replace("'", "''");
0
user1847879