2010-07-01 3 views
2

Y a-t-il une raison valable pour laquelle la fonction String.Format dans .net (pour C# et VB.net au moins) est partagée et pas comme .split, .substring ou quoi que ce soit une fonction normale.Pourquoi dans .net la fonction String.Format (fmt, args, ..) "shared"

Quel serait mal à

Dim a as String = "1+2={0}".format(1+2) (serait bon)

contre

Dim a as String = String.Format("1+2={0}",1+2) (la façon dont il fonctionne)

Il m'a toujours des bugs lorsque vous utilisez cette fonction - qui Je fais assez souvent.

Thx.

+0

'Compare',' Concat' et 'Join' sont également partagés. Cela ne vous dérange pas? – Oded

+0

Ouais - especial Join, mais cela ne change pas ma question ... – DanielAt

Répondre

5

Peut-être Eric Lippert a toujours les notes de conception sur cela, mais à part cela, je ne pense pas que cela puisse être répondu avec précision.

encore, comme une solution de contournement, si vous avez besoin désespérément cela, alors vous pouvez écrire une méthode d'extension:

public static string Format(this string fmt, params object[] args) { 
    return string.Format(fmt, args); 
} 

Mon conjecture est que la plupart des méthodes de chaîne réellement fonctionnent sur la chaîne, le transformant d'une manière directe et prévisible, telle que Substring, Replace et PadLeft. Avec Format la chaîne de base est juste un modèle qui est appliqué pour intégrer les opérandes dans. Conceptuellement, la plupart des méthodes d'instance sur string peuvent être considérées comme manipulant un string (je sais, ce n'est pas ce qui se passe, je ne fais que peindre une image ici), alors que les méthodes statiques fonctionnent juste avec.

Comme indiqué, juste une supposition. En fin de compte c'était probablement juste une décision et la raison a été perdue à temps.

+0

Je sais - ont déjà codé une telle fonction, seulement pour savoir qu'il faut au moins .net3.5 - et notre entreprise de pointe technologique est toujours sur. net2.0 – DanielAt

+1

Les méthodes d'extension n'ont besoin que du compilateur C# 3 *, le code résultant fonctionne encore correctement avec seulement .NET 2. – Joey

+0

Ouais - mais pour asp.net il n'est pas si simple de changer le compilateur (afaik). – DanielAt

3

C'est juste une décision de conception - cela pourrait vraiment fonctionner dans les deux sens. Je pense qu'ils ont décidé de le rendre statique/partagé pour (1) raisons historiques, pour le rendre plus similaire à C/C++ (2) parce que vous pouvez argumenter que la chaîne de format n'est pas un "vrai" texte, dans la plupart des cas utilise une constante inline, et il se lit mieux si c'est un argument d'une fonction.