2015-10-09 2 views
-1

Я пишу небольшое приложение WPF, которое помогает моей компании обновлять проекты клиентов. У меня есть список SQL-файлов, которые я должен выполнить. Теперь эти сценарии всегда записываются с помощью «USE [Insert_Database]». Я прочитал все содержимое скрипта в строку, но мой метод Replace, похоже, ничего не делает.Заменить конкретную строку в большой строке

string content = File.ReadAllText(file); 
content.Replace("Insert_Database", Database.Name); 
SqlScriptsList.Add(new SqlScriptModel {Name = Path.GetFileName(file), Path = file, ScriptContent = content}); 

Я также ничего не нашел при просмотре здесь. Может ли кто-нибудь отправить мне ссылку или объяснить, что я делаю неправильно?

+2

Небольшое предложение - если строка действительно большая, и вы сделаете много замен, я бы порекомендовал вам поиск веревочной реализации - хорошая структура для перфо rm на больших струнах. – pwas

+0

Строки неизменяемы. Содержимое строкового объекта не может быть изменено после создания объекта, хотя синтаксис делает его таким, как будто вы можете сделать это –

ответ

3

String.Replace возвращает модифицированный string, поэтому она должна быть:

content = content.Replace(....); 

Этот метод не изменяет значение текущего экземпляра. Вместо этого он возвращает новую строку, в которой все вхождения oldValue заменяются newValue.

0

Вы не используете новое значение при вызове replace.

string content = File.ReadAllText(file); 
content = content.Replace("Insert_Database", Database.Name); 
SqlScriptsList.Add(new SqlScriptModel {Name = Path.GetFileName(file), Path = file, ScriptContent = content}); 

для справки: документ MSDN для замены https://msdn.microsoft.com/en-us/library/system.string.replace(v=vs.110).aspx

1

Вы можете использовать функцию замены, как следовать по струнам

str = str.Replace("oldstr","newstr"); 

если oldstr находится в ул, то он будет заменен на новый str

Смежные вопросы