fait .NET 3.5 C # Permettez-nous d'inclure une variable dans une variable de chaîne sans avoir à utiliser le concaténateur + (ou String.Format (), pour cette affaire).
Par exemple (dans le pseudo, je ' m Utilisation d'un symbole $ Pour spécifier la variable): p> sortie: p> La date est le 4/12/2011 11:56:39 AM P>
blockQuote> edit strud> p> en raison de la poignée des réponses suggérées string.format (), je ne peux supposer que mon message original n'était pas clair quand je mentionné " ... (ou string.format (), pour cette affaire) em>". Pour être clair, je suis bien conscient de la méthode String.Format (). Cependant, dans mon projet spécifique que je travaille sur, String.Format () ne m'aide pas (c'est en fait pire que le concaténateur +). P> aussi, je déduit que la plupart / tous de vous vous demandez quel est le motif derrière ma question (je suppose que je ressentirais la même chose si je lisais ma question tel quel). P> Si vous êtes l'un des curieux, voici le court-circuité : P> Je crée une application Web exécutée sur un périphérique Windows CE. En raison de la fonctionnalité du serveur Web, je crée l'ensemble du contenu de la page Web (CSS, JS, HTML, etc.) dans une variable de chaîne. Par exemple, mon code géré .CS peut avoir quelque chose comme ceci: P>
string GetPageData()
{
string title = "Hello";
DateTime date = DateTime.Now;
string html = @"
<!DOCTYPE html PUBLIC ...>
<html>
<head>
<title>$title</title>
</head>
<body>
<div>Hello StackO</div>
<div>The date is $date</div>
</body>
</html>
";
}
14 Réponses :
string.Format("The date is {0}", DateTime.Now.ToString())
Pourquoi avoir un code supplémentaire? Surtout compte tenu de cela est un site de questions et de réponses. Quelqu'un vous copiera et beaucoup plus de gens devront y faire face.
Ça épargne sur la boxe du DateTime
@Yuriy Faktorovich: Conversion de la valeur en chaîne évite la boxe. Si vous ne le faites pas explicitement, cela se fera implicitement, il n'ya donc aucun code supplémentaire créé. Parfois, il est préférable de montrer ce que le code fait avec le code source réel au lieu de faire de le compilateur à créer le même code implicitement. Dans l'ensemble, ce n'est pas un cas de coupe claire où une façon est clairement meilleure que l'autre.
Si seul le réflecteur était toujours libre, je pouvais donc voir s'il s'agit de la boxe ou non.
@Brandon: "@ guffa - merci. Je n'allais pas répondre ..." _ I> - Vous savez que c'est ce que les icônes de flèche 'Up' sont pour IL_000B: ldloc.0; iL_000C: boîte [mscorlib] system.dateTime code>)
@Yuriy Faktorovich - Découvrez ILSPY
@Yuriy Faktorovich: the string.format code> ne prend que le type
objet code> pour les paramètres de données, de sorte que tout type de valeur doit être en boîte à envoyer à la méthode.
L'OP ne veut pas utiliser .format code>
Non, ça ne le fait pas. Il y a des moyens autour de cela, mais ils ont vaincu le but. La chose la plus facile pour votre exemple est
string output = "the date is $d and time is $t"; output = output.Replace("$t", t).Replace("$d", d); //and so on
"Sans avoir à utiliser [...] string.format ()"
Sur votre question. Non, mais je suis curieux pourquoi tu le veux comme ça.
Je crée une application Web en cours d'exécution sur un périphérique Windows CE. Longue histoire courte, je crée l'ensemble du contenu de la page Web (CSS, JS, HTML) dans une variable de chaîne. Comme vous pouvez l'imaginer, la chaîne var devient assez laide avec tous les concats + pour y compris mes variables dans la chaîne var. Cela faciliterait ma vie si nous pouvions utiliser la syntaxe en ligne PHP / ColdFusion.
Vous pouvez utiliser des porteurs de places tels que #variablename code> (comme dans votre question), puis utilisez` string.replace () `? ..
@Jed qui ressemble à une question totalement différente. Vous devriez probablement utiliser un StressBuilder. Avoir de longues chaînes comme ça pourrait éventuellement polluer le loh.
@ROBINMABEN - Beaucoup de langues sont équipées de la fonctionnalité "Variable intérieure". Je voudrais utiliser ceci pour construire des commandes SQL facile à lire car cela est beaucoup plus lisible que les requêtes paramétrisées. (Pas de soucis, la sécurité est manipulée.) So suggéré remplacer () code> n'est pas un équivalent de ce qui est donné dans la réponse acceptée - Imagine expression suivie de 5 Remplacer par rapport à Simple
"My String". PHPIT (Nouveau {A, B, C, D, E}) Code> sans aucun code supplémentaire. Ceci est également plus sûr, vous ne pouvez pas mélanger accidentellement l'ordre des paramètres (comme avec {0}, {1}); Vous pouvez également lancer une exception FixMe si le param n'est pas dans la chaîne, etc. :)
@Miroxlav: Utilisation Vues de rasoir CODE> B> Voulez-vous résoudre le problème immédiatement, je suppose.
ou combiné: info supplémentaire (en réponse à Brandonzeider ): p> Yep, c'est gentil - un important pour les gens de Réalisez que la conversion de chaîne est automatiquement effectuée. L'ajout manuellement de tostring est cassé, par exemple: p> string value = null;
Console.WriteLine("The value is '{0}'", value); // OK
Console.WriteLine("The value is '{0}'", value.ToString()); // FAILURE
Il n'y a rien qui dit que le formatage devrait i> toujours être capable de gérer une valeur null. Si la valeur n'est pas censée être nulle, il n'y a pas de valeur ajoutée dans la manipulation du cas où il est null.
Mec ... surmonter ça. DateTime.now ne peut pas être nul. Est-ce que je t'ai coupé dans la circulation ou quelque chose?
Pense qu'il voulait dire le type nullable type DateTime ?? code>. De toute façon, je ne me soucie pas beaucoup pour une réponse. Je préfère beaucoup que le
c # est NPT php code> commentaires effectué précédemment :).
N'hésitez pas à être en désaccord. Je ne t'ai pas taillé non plus; D'une manière ou d'une autre, vous m'avez demandé de clarifier. Ceci j'ai fait.
La réponse courte et simple est: non! p>
Bien qu'il soit un peu trop simple. C'est est i> short.
Pourquoi est-ce trop simple? Toutes les autres réponses ignorent évidemment que l'auteur a un format exclu et des fonctions similaires.
Techniquement, la réponse est trop simplifiée lorsque vous envisagez la base de la fonctionnalité requise (voir la réponse acceptée).
Non, mais vous pouvez créer une méthode d'extension sur l'instance de chaîne pour créer la dactylographie plus courte.
string s = "The date is {0}".Format(d);
non, malheureusement c # n'est pas php.
Au bon côté, c # n'est pas php. P>
Heureusement, c # tire le meilleur de PHP :) String Interpolation est maintenant disponible dans C # 6.0 et Visual Basic 14.
string.format CODE> (et des fonctions de formatage similaires telles que
stringbuilder.appendormat code>) sont le meilleur moyen de le faire en termes de flexibilité, de codage pratique et (généralement) Performance:
string s = string.Format("The date is {0}", d);
Vérifiez Ce site asnwer sur la solution Comment réaliser quelle option OP demandée tout en conservant la syntaxe de String.Format B> {0: HH: mm} code> (dans ce cas
{maintenant: hh: mm} code>)
Que diriez-vous d'utiliser le moteur de modèles T4? p>
http://visualstudiomagazine.com/ Articles / 2009/05/05 / 01 / Visual-Studios-T4-Code-Generation.aspx P>
Si vous essayez simplement d'éviter la concaténation de chaînes immuables, ce que vous recherchez est stringbuilder .
Utilisation: p>
string parameterName = "Example"; int parameterValue = 1; Stringbuilder builder = new StringBuilder(); builder.Append("The output parameter "); builder.Append(parameterName); builder.Append("'s value is "); builder.Append(parameterValue.ToString()); string totalExample = builder.ToString();
presque, avec une petite méthode d'extension.
string foo = "Bar"; int cool = 2; var result = "This is a string $foo with $cool variables" .PHPIt(new { foo, cool }); //result == "This is a string Bar with 2 variables"
Basé sur la grande réponse de @jesperpalm J'ai trouvé une autre solution intéressante qui utilise une syntaxe similaire comme dans la méthode normale Cela vous donne la possibilité d'ajouter la mise en forme habituelle: p> string.format code>:
Je vois une valeur ajoutée ici dans l'activation de string.format () code> Spécificateurs de format.
Depuis "Le titre est \ {titre}" code> qui fait exactement ce dont vous avez besoin. P>
Le C # 6.0 appuie-t-il le refactoring pour de telles cordes? Sinon, il est assez dangereux de coder le nom de la variable dans une chaîne.
Vous pouvez utiliser quelque chose comme celui-ci comme mentionné dans la documentation C #.
Qu'est-ce que vous avez contre le concaténator? Qu'est-ce que le pauvre speak plus signalez-vous à vous? Toute sa vie, c'est coincé faire l'exemple exactement, au moins que vous pouvez faire est l'utiliser.
@Ramhound - ha! Je veux dire aucun manque de respect envers le pauvre petit signe plus. Pour le motif derrière ma question, lisez ma réponse à @conqenator.
L'idée n'est pas mauvaise mais je ne le ferais jamais. Dès que vous renommez vos variables, cela ne fonctionnerait plus.
@ T3CHB0T - Si refactoring le gère bien, alors pas de soucis