2009-07-06 6 views
0

Je viens de convertir une solution VB.net en solution C#. Mais beaucoup de variables ont été coverted comme:En C# VS2008 comment remplacer (chaîne) aaa aaa.ToString()

string var1 = (string)1; 
string var2 = (string)intVar; //intVar is a int value 

Je veux juste convertir tous (string)XXXX-XXXX.ToString() en utilisant des expressions régulières ou une autre remplacer les méthodes.

Quelqu'un peut-il m'aider?

+0

S'agit-il simplement d'un problème de formatage du code, ou y a-t-il un problème avec les distributions (chaîne)? – Joe

+0

C'est un problème avec les distributions (chaîne): Impossible de convertir l'expression de type 'int' en type 'chaîne' – CodeYun

Répondre

0

vous suggère d'utiliser celui-ci

Recherche: \ (string \) {(*).} {: Po}

Remplacer: \ 1.ToString() \ 2

Bonne la chance!

+0

Wow! ça marche super! Sauvez ma vie. – CodeYun

0

Je ne connais pas trop regex mais j'offre plutôt un avertissement. Vous ne voudrez peut-être pas remplacer tous (string) xxx par xxx.toString() car (comme vous le savez j'en suis sûr) (string) est cast et un ToString() est un appel de méthode. Vous pouvez seulement lancer quelque chose sous forme de chaîne si l'objet est un descendant de chaîne. Vous pouvez appeler ToString() si l'implémenteur de la classe remplace la méthode ToString(). Sinon, vous allez juste obtenir l'implémentation par défaut.

+0

Dans ma solution, la plupart des cas sont convertis en valeur de chaîne en valeur de chaîne. Donc, ma question est comment convertir (string) intValue dans le format intValue.ToString(). Il peut me donner quelques erreurs mais totalement les erreurs de compilation vont diminuer énorme – CodeYun

+0

Je suis d'accord que la correction des erreurs de construction est bonne, mais l'autre problème, comme cette affiche et moi-même l'avons souligné, ne sera pas remarqué si vous utilisez simplement trouver/remplacer la méthode. –

+0

Je ne sais pas trop pourquoi cela a été downvoted mais de toute façon. – uriDium

3

L'éditeur de texte Notepad++ prend en charge les expressions régulières. Vous pouvez essayer quelque chose comme: Remplacer [(]string[)][ ]*([^ .\t;/]*) par \1.ToString().

Cela transforme ceci:

(string) xyz; 
(string) abc.123; 
(string)alf; 
(string)argu ment 

dans ce:

xyz.ToString(); 
abc.ToString().123; 
alf.ToString(); 
argu.ToString() ment 

Ceci, cependant, ne gère pas le cas de (string) aFunction(obj1, obj2).

Vous voudrez peut-être les gérer vous-même en premier ou créer une autre expression rationnelle.

+0

Commentaires pour un problème avec ce serait utile. Je crois que cela répond à la question du PO, et fournit des mises en garde, et a été modifié plusieurs fois à mesure que de nouvelles mises en garde sont trouvées. – maxwellb

+0

Je devinerais qu'il demandait de faire cela dans VS, qui n'est pas notepad ++. Plus regex VS est foiré, donc regex standard ne fonctionnera pas. – Will

+0

Eh bien, la question demande "Comment puis-je convertir tout (chaîne) aaa en aaa.ToString()" .. donc, était adressant cela. C'est comme le vieux "Ma voiture ne démarre pas, j'ai besoin d'essence". Alors, quand je vous donne du gaz, votre voiture ne démarre pas. Une autre question peut être en ordre. Mais je t'ai quand même donné le gaz. :-) Merci pour le commentaire. – maxwellb

0

Eh bien, la raison pour laquelle vous obtenez le code supplémentaire dans la conversion, c'est que vous n'avez pas Option Strict On dans le code VB. Si vous l'aviez, vous ne seriez pas en mesure de faire ces conversions implicites en premier lieu.

Ainsi, le code VB devrait ressembler à cela, et le code C# serait alors regarder à droite dans la conversion:

var1 As String = "1" 

var2 As String = intVar.ToString 

Pour résoudre ce problème après la conversion se fait est tout à fait au-delà d'une expression régulière est capable de. Bien sûr, vous pourriez faire une expression qui convertirait tous (string)x-x.ToString(), mais ce serait probablement causer plus de problèmes qu'il fixe ...

4

trouver: \ (string \) {: a *}
remplacer: \ 1.ToString()

Sauvegardez d'abord votre solution!

+0

Vous devez échapper les parenthèses, qui ne sont pas apparues dans la réponse. fixé. – Will

+0

Merci Will! Votre solution est idéale pour les questions originales. Mais j'ai trouvé qu'il y a quelques autres cas: Quelque chose comme: attbXML.InnerText = (string) oField.Type; Je dois convertir en: attbXML.InnerText = oField.Type.ToString(); Pensez-vous que c'est possible? – CodeYun

+0

Vous pouvez changer: a * pour [: a \.] * – Will

1

Je ne suis pas sûr si vous voulez vraiment faire cela comme une conversion de masse. Comme dans toute réalité dans votre exemple, vous devriez vous retrouver avec ce qui suit.

string var1 = "1"; 

et

string var2 = intVar.ToString(); 

Il n'y a pas besoin de votre premier exemple à faire un casting, quand il peut être une chaîne depuis le début.

Questions connexes