C#: string.Trim() не удаляет пробелы

У меня есть приглашение с просьбой ввести дату (в определенном формате). Затем я обрезаю строку, однако, если при нажатии клавиши "Ввод" в окне приглашения появилось дополнительное пространство, после обрезки строка все равно выходит с дополнительным пробелом. Я также опубликую свой код подсказки. Моя строка: 29 июля 2015 13:32:01 PDT и 30 июля 2015 12:34:27 PDT

    string afterpromptvalue = Prompt.ShowDialog("Enter earliest Date and Time", "Unshipped Orders");
                    afterpromptvalue.Trim();
                    string beforepromptvalue = Prompt.ShowDialog("Enter latest Date and Time", "Unshipped Orders");
                    beforepromptvalue.Trim();

 string format = "MMM dd, yyyy h:mm:ss tt PDT";

            CultureInfo provider = CultureInfo.InvariantCulture;

            afterpromptvalue.Trim();
            beforepromptvalue.Trim();


            DateTime createdAfter = DateTime.ParseExact(afterpromptvalue, format, provider);



            DateTime createdBefore = DateTime.ParseExact(beforepromptvalue, format, provider);

public static class Prompt
{
    public static string ShowDialog(string text, string caption)
    {
        Form prompt = new Form();
        prompt.Width = 500;
        prompt.Height = 150;
        prompt.FormBorderStyle = FormBorderStyle.FixedDialog;
        prompt.Text = caption;
        prompt.StartPosition = FormStartPosition.CenterScreen;
        Label textLabel = new Label() { Left = 50, Top=20, Text=text };
        TextBox textBox = new TextBox() { Left = 50, Top=50, Width=400 };
        Button confirmation = new Button() { Text = "Ok", Left=350, Width=100, Top=70, DialogResult = DialogResult.OK };
        confirmation.Click += (sender, e) => { prompt.Close(); };
        prompt.Controls.Add(textBox);
        prompt.Controls.Add(confirmation);
        prompt.Controls.Add(textLabel);
        prompt.AcceptButton = confirmation;

        return prompt.ShowDialog() == DialogResult.OK ? textBox.Text : "";
    }
}

3 ответа

Решение

string.Trim возвращает новую строку Он не обновляет существующую переменную.

Строки являются неизменяемыми - содержимое строкового объекта не может быть изменено после создания объекта

https://msdn.microsoft.com/en-us/library/362314fe.aspx

Правильный синтаксис для вашего кода будет:

afterpromptvalue = afterpromptvalue.Trim();

Вызов Trim() для строки не меняет саму строку. Возвращает обрезанную строку.

В C# строки не могут быть изменены. Все, что вы можете сделать для строки, - это присвоить ей новую строку, вызов метода для строки не может изменить исходную строку, если вы не назначите возвращаемое значение для рассматриваемого строкового объекта.

Например, изменить:

afterpromptvalue.Trim();

Для того, чтобы:

afterpromptvalue = afterpromptvalue.Trim();

Вы должны попробовать это возможно;)

afterpromptvalue = afterpromptvalue.Trim();
beforepromptvalue = beforepromptvalue.Trim();

И прочитайте это:

https://msdn.microsoft.com/en-gb/library/d4tt83f9(v=VS.110).aspx

Может быть, эта цитата здесь интересна для вас

Неизменность и класс StringBuilder

Объект String называется неизменяемым (только для чтения), поскольку его значение нельзя изменить после его создания. Методы, которые появляются для изменения объекта String, на самом деле возвращают новый объект String, который содержит модификацию.

Другие вопросы по тегам