parse - stringbuilder replace c#




Pourquoi utiliser TagBuilder au lieu de StringBuilder? (4)

ne génèrent-ils pas la même chose ??

Bien, bien sûr, mais cela ne devrait pas être dissuasif, non? Une classe est conçue pour quelque chose de plus spécifique que l’autre, elle offre donc un plus grand confort.

Je pourrais demander: pourquoi utiliser un StringBuilder ? Pourquoi pas une List<char> ? Est-ce que je ne pourrais pas générer la même chose de l'un ou l'autre?

Pour aller encore plus loin: pourquoi même un List<char> ? Pourquoi ne pas simplement un caractère char[] , le redimensionnement / manipulation que je peux me contrôler? Je peux encore totalement créer une string partir d'un caractère char[] .

En fait, tout ce dont j'ai besoin, c'est d'un char* et d'un int (pour la longueur). Droite?

Mon idée est simplement que si une classe est disponible pour des fonctionnalités spécialisées que vous pouvez utiliser, il est logique de l’utiliser si vous me le demandez.

Quelle est la différence entre l'utilisation du générateur de balises et du générateur de chaînes pour créer une table dans une classe htmlhelper ou l'utilisation de HtmlTable?

ne génèrent-ils pas la même chose ??


C'est juste la commodité. A partir de ce tutoriel :

Vous n'avez pas vraiment besoin d'utiliser la classe TagBuilder. Vous pouvez utiliser une classe StringBuilder à la place. Cependant, la classe TagBuilder vous facilite un peu la vie.

Examinez les méthodes sur TagBuilder et demandez-vous si elles vous donnent une valeur. voudriez-vous faire la même chose vous-même manuellement dans StringBuilder chaque fois? Y a-t-il une fuite que cela fait pour vous? La fusion d'attributs, etc? Le code qui en résulte est-il plus facile à lire, en précisant que vous construisez une balise plutôt qu'une chaîne quelconque?


Il y a un point que les autres réponses ont manqué jusqu'à présent. Si vous renvoyez TagBuilder partir d'une méthode d'extension, vous pouvez continuer à ajouter des attributs dans votre vue. Supposons que vous retourniez une table à partir d'un assistant HTML et que vous souhaitiez ajouter un attribut de classe. Si vous utilisez un StringBuilder vous devez transmettre la classe en tant que paramètre.

public static string Table(...., string @class)
{
    ...
    sb.AppendFormat("class='{0}", @class);
    ...
}

// In the view
<%: Html.Table(someParams, "fancy") %>

Mais ajouter un attribut de classe à une balise HTML ne relève pas d'une méthode d'extension qui crée un tableau! Si nous basculons vers un modèle sémantique (TagBuilder) pour générer le code HTML, nous pouvons ajouter l'attribut de classe en dehors de la méthode table.

public static TagBuilder Table(....)
{
    ...
    return tag;
}

// In the view
<%: Html.Table(someParams).AddCssClass("fancy") %>

Outre TagBuilder, vous pouvez également consulter la bibliothèque HtmlTags de FubuMVC. C'est un modèle bien meilleur pour générer du HTML. J'ai quelques détails supplémentaires sur le blog.


N'oubliez pas de faire l'encodage HTML des valeurs si vous utilisez StringBuilder. J'espère que TagBuilder le fera automatiquement.





tagbuilder