c# string.remplacer, dans la boucle foreach
De toute façon je n'arrive pas à obtenir de la chaîne de remplacement à l'intérieur d'une boucle foreach en C# pour le travail. Mon code est comme suit :
foreach (string s in names)
{
s.Replace("pdf", "txt");
}
Suis encore assez nouveau pour LINQ donc pardonnez-moi si cela sonne amateur 😉
OriginalL'auteur paradox | 2010-04-26
Vous devez vous connecter pour publier un commentaire.
Vous dites que vous êtes après une LINQ solution... c'est facile:
Nous ne connaissons pas le type de
names
, mais si vous voulez affecter à elle vous pouvez éventuellement utiliserToArray
ouToList
:Vous devez être conscient que le code que vous avez posté n'est pas à l'aide de LINQ à tous en ce moment...
OriginalL'auteur Jon Skeet
Chaînes de caractères en C# sont immuables (ne change pas), donc
s.Replace
sera de retour une nouvelle chaîne. Malheureusement, cela signifie que vous ne pouvez pas utiliserforeach
faire la mise à jour. Si les noms de est un tableau qui devrait fonctionner:List<string>
trop. Il suffit de remplacer Longueur avec CountOriginalL'auteur Anders Abel
Comme d'autres l'ont mentionné que tu avais besoin d'utiliser un
for
boucle pour ce faire sur place. Toutefois, si vous n'avez pas besoin de l'opération à faire sur place (c'est à dire les résultats peuvent être différents de la collection), alors vous pouvez aussi le faire comme une requête linq, par exempleUne chose bien qu'il semble que vous essayez de changer l'extension de certains noms de fichiers. Si c'est ce que vous cherchez à faire alors je vous recommande de
Path.ChangeExtension
qui est spécifiquement conçu à cet effet.Je pense juste que les expressions de requête esthétique et sont un peu plus facile à lire. Il compile tous les vers le bas pour le même code, et de taper quelques caractères supplémentaires ne sont pas vraiment me dérange pas. Si je faisais quelque chose qui ne peut être exprimé dans une requête telle que l'utilisation de skip/prendre ou de le convertir à une liste alors je serais probablement utiliser l'extension des méthodes directement.
Je pense que c'est juste une préférence personnelle... j'ai certainement l'amour expressions de requête quand ils deviennent plus compliquées, mais si vous êtes juste faire un filtre ou une projection unique, ils semblent moins directe manière d'exprimer.
Une autre raison pour moi est que, souvent, les requêtes simples peuvent se transformer en plus complexes, par exemple dans le code ci-dessus, j'ai peut-être besoin d'ajouter
where Path.GetExtension(name) == ".pdf"
pour rendre le code à l'aide de laPath
classe correspondre à l'intention de l'original. La rédaction d'une requête, en premier lieu, signifie qu'il ne doit pas être trop changé si elle devient de plus en plus complexes à l'avenir. Mais pour être honnête, je n'ai pas beaucoup de toute façon, et il dépend probablement plus sur quelle humeur je suis dans la façon dont les autres requêtes de la méthode sont écrits autant que rien!OriginalL'auteur Greg Beech
s.Remplacer est une fonction que vous désirez s=s.Replace().. même si il est préférable d'utiliser StringBuilder. (voir ci-dessus la réponse)
OriginalL'auteur Radu Pintilie
Pourquoi utiliser les remplacer, ce qui rend l'application lente. Utiliser les regex:
http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.replace.aspx
OriginalL'auteur Fish