Что эквивалентно замене VB (str1, str2, str3) в C #? - PullRequest
0 голосов
/ 24 мая 2018

Как в VB, так и в C # я знаю, что когда мы заменяем строку, мы используем: FILE.Replace, и мы не присваиваем инструкцию переменной.Например, File.Replace(text1, text2, text1);

Однако у меня есть VB-код, который я хочу использовать и преобразовать в код C #, и я очень озадачен тем, как использовался Replace.

Код VB работает правильно!

Вот код VB:

    Dim pdfTemplate As String = Path.Combine(Application.StartupPath, "PDFs\2017-I9.pdf")
    pdfTemplate = Replace(pdfTemplate, "bin\Debug\", "")


    Dim fields = New Dictionary(Of String, String)() From {
      {"textFieldLastNameGlobal", Me.tbLast.Text},
      {"textFieldFirstNameGlobal", Me.tbFirst.Text},
      {"textFieldMiddleInitialGlobal", Mid(Me.tbMiddle.Text, 1, 1)},
      {"textFieldOtherNames", Me.tbOtherName.Text}
    }

Строка pdfTemplate = Replace (pdfTemplate, "bin \ Debug \", "") это то, что смутило меня, и я не смог преобразовать его в C #.

Кстати, код VB был написан и выложен здесь, но я забыл, кто этот человек.Я хочу дать автору кредит, хотя я не упоминаю его / ее.

Ниже моя попытка сделать подобный код в C #

pdfTemplate = HostingEnvironment.MapPath("~/Content/PDFs/2017-I9.pdf");
pdfTemplate = File.Replace(pdfTemplate, "bin\\Debug\\", "");

        var fields = new Dictionary<string, string>()
        {
            {"textFieldLastNameGlobal", EL.LastName},
            {"textFieldMiddleInitialGlobal", EL.MiddleName},
            {"textFieldFirstNameGlobal", EL.FirstName},
            {"textFieldOtherNames", EL.OtherLastName}
        };

Я получаю ошибку на pdfTemplate = File.Replace (pdfTemplate, "bin \ Debug \", "");

1 Ответ

0 голосов
/ 24 мая 2018

Код C #, эквивалентный VB Replace(str1, str2, str3), равен str1.Replace(str2, str3).

Таким образом, эта строка:

pdfTemplate = Replace(pdfTemplate, "bin\Debug\", "")

должна стать такой:

pdfTemplate = pdfTemplate.Replace("bin\Debug\", "")

Хотя это тоже неправильно, потому что в C # символ \ в строке экранирует следующий символ, и в этом случае компилятор C # будет жаловаться на нераспознанную escape-последовательность, а также на новую строку в константной строке, потому чтосначала он не понимает, что вы подразумеваете под \D, затем \" экранирует кавычку, что означает, что строка не заканчивается.

Вы можете либо удвоить обратную косую черту, либо поставить @ перед строкой, поэтому должно работать любое из следующего:

pdfTemplate = pdfTemplate.Replace(@"bin\Debug\", "");
pdfTemplate = pdfTemplate.Replace("bin\\Debug\\", "");

Обратите внимание, что я также добавил точки с запятой в конец операторов.


Слово предупреждения : Для манипуляций path обычно лучше использовать класс Path в .NET, так как он предназначен для правильной обработки путевых странностей.

Например, если у вас есть файлнаmed Trashbin\Debug\File в итоге вы получите TrashFile, что не совсем правильно.

Вы можете сделать это:

string templateFolder = Path.GetFullPath(Application.StartupPath);
if (templateFolder.EndsWith(@"\\bin\\debug", StringComparison.InvariantCultureIgnoreCase))
    templateFolder = Path.GetFullPath(Path.Combine(templateFolder, "..", ".."));
string templateFile = Path.Combine(templateFolder, "PDFs", "2017-I9.pdf");

Если вам нужен код для запускаВ других операционных системах, отличных от Windows, вы должны использовать класс Path, чтобы найти Debug и bin, а также в других операционных системах могут использоваться прямые косые черты или двоеточия в качестве разделителей пути.1045 *File.Replace делает что-то совершенно другое, он заменяет файл , а не содержимое строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...