1
votes

Convertir une chaîne en majuscules à l'aide de l'interpolation de chaîne

Pouvons-nous utiliser l'interpolation de chaîne pour convertir une chaîne en majuscules, tout comme nous l'utilisons avec l'objet DateTime :

$"Current date is {DateTime.Now:MM-dd-yyyy}";

Y a-t-il un modificateur de format de chaîne qui peut être passé après le : pour convertir la chaîne en majuscules, sachant que la culture / localisation n'est pas importante?

PS Je cherche un moyen de le faire sans appeler les méthodes string.ToUpper ou ToUpperInvariant , je connais ces méthodes et je peux les utiliser.

Je cherche une manière "abrégée" de le faire, comme au lieu d'écrire:

DateTime.Now.ToString("MM-dd-yyyy")

Vous écrivez à la place:

var str = $"Current date is {DateTime.Now:MM-dd-yyyy}";


9 commentaires

Non, il n'y a rien. Appelez ToUpperInvariant () dessus.


@ canton7 Donc, la syntaxe de l'interpolation de chaîne ne prend pas en charge une sorte de modificateur de format pour faire cela?


Les modificateurs de format contrôlent la façon dont une valeur est transformée en chaîne. Les chaînes sont déjà des chaînes, donc elles ne les ont pas.


En effet. string.ToString (format de chaîne, IFormatProvider formatProvider) ignore simplement le format - il n'y a rien que vous pouvez transmettre qui affectera en aucune façon la façon dont la chaîne est formatée. Ici: referencesource.microsoft.com/#mscorlib/system/…


alors ça ne va pas? ... $ "La date actuelle est {DateTime.Now.ToString (" MM-jj-aaaa "). ToUpper ()}"


@ usr4217 Je sais que je peux le faire, je cherchais un raccourci pour le faire, tout comme au lieu de DateTime.Now.ToString ("MM-jj-aaaa") vous utilisez { DateTime.Now:MM-dd-yyyy}


Quelle est cette question? La chaîne en majuscules n'est pas un format de chaîne , c'est un tableau de char contenant des caractères différents de char [s] minuscules. C'est comme si vous demandiez pouvez-vous ajouter des jours à l'objet DateTime avec string.Format () .


Je ne comprends vraiment pas à quoi sert de voter à la baisse sur cette question? Quel point essayez-vous de souligner en votant à la baisse sur ma question? Quelle sorte de norme communautaire cette question enfreint-elle?


@MexicMexicalian Downvoting n'est pas pour montrer que la question enfreint certaines normes de la communauté, c'est pour montrer que la question ne montre aucun effort de recherche, ce n'est pas clair, inutile, hors sujet etc.


3 Réponses :


3
votes

Compte tenu du Documentation de la méthode DateTime.ToString , no. Comme ce que vous voulez faire est de manipuler la casse de la chaîne et non le formatage DateTime, cela a du sens.

Pour un formatage rapide d'interpolation de chaîne, vous souhaitez que l'objet à mettre en forme implémente IFormattable , ce qui n'est pas le cas du type String .


0 commentaires

0
votes

Comme dit précédemment, ce dont vous avez besoin n'est pas une méthode DateTime, mais une méthode de chaîne.

didactiquement, je ferais ceci:

string dt = DateTime.Now.ToString("MM-dd-yyyy");
Console.WriteLine($"current date is {dt}".ToUpperInvariant());

Si vous voulez savoir pourquoi toUpperInvariant (), et pas toUpper ():

c'est parce que nous ne considérerons pas la culture ocale ( En C # quelle est la différence entre ToUpper () et ToUpperInvariant ()? )


4 commentaires

"PS Je cherche un moyen de le faire sans appeler la méthode string.ToUpper , je connais cette méthode et je peux l'utiliser" Je pense que la même chose s'applique à ToUpperInvariant .


Eeeehm, cela a été modifié dans la question il y a 23 minutes. Quoi qu'il en soit, votre réponse ne s'applique tout simplement pas.


J'ai édité la question pour ajouter explicitement cette partie, la citation de @HimBromBeere était exactement mentionnée dans ma question. Mais j'ai pensé que ce n'était pas assez clair.


Bien que cette partie explique clairement ce que je recherche: "Y a-t-il un modificateur de format de chaîne qui peut être passé après le: pour convertir la chaîne en majuscules, sachant que la culture / localisation n'est pas importante?"



0
votes

L'interpolation de chaîne utilise essentiellement String.Format (...) , qui utilise FormatHelper , qui utilise ... ( Voir source de référence MS ) qui utilise la méthode ToString (format de chaîne, IFormatProvider formatProvider) si votre objet a l'interface System.IFormattable implémenté.

J'ai écrit un exemple d'application pour le tester.

Avec

myclass: I am called. format: MyParams

Vous pouvez appeler p >

MyClass mc = new MyClass();
Console.WriteLine($"myclass: {mc:MyParams}");

qui produit le résultat

private class MyClass : IFormattable
{
    public string ToString(string format, IFormatProvider formatProvider)
    {
        return "I am called. format: " + format;
    }
}

Pour cela, vous pouvez utiliser l'interpolation de chaîne avec vos paramètres personnalisés, mais vous ne pouvez pas l'utiliser avec un System.String-object.


0 commentaires