Arhn - архитектура программирования

Как вернуть составную строку в переопределенной функции ToString?

Я не уверен, как сделать вопрос более ясным, но это основная проблема:

У меня есть класс, полученный из другого моего класса. Базовый класс имеет переопределенную функцию Tostring (возвращает 2 строки, разделенные двоеточием).

Проблема в том, что мой производный класс может иметь массив строк или только одну строку, поэтому, когда я переопределяю функцию ToString, мне нужно вернуть базовый класс, а также массив строк (разделенных "\n") в производном класс. Теперь мне интересно, как лучше всего это сделать; должен ли я возвращать массив строк (если возможно) или у меня нет другого выбора, кроме как использовать класс Stringbuilder? Если есть другой способ сделать это, пожалуйста, сообщите. Все идеи приветствуются, какими бы сумасшедшими они ни были :)

10.08.2009

Ответы:


1

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

public override ToString()
{
    return base.ToString() + "\n" + string.Join("\n", stringArray);
}

Это предполагает, что вы хотите вернуть строку, например:

base1:base2
this1
this2
this3

где разделители строк \n.

10.08.2009
  • Вы должны использовать Environment.NewLine для разделителя, если нет специального требования не делать этого, где реализация ToString() обычно не является одним из исключений. :) 11.08.2009
  • Я просто исходил из спецификации в строке. Я даже не уверен, что согласен с вашей рекомендацией - это все равно, что использовать Encoding.Default. Не зная, где будет использоваться строка, никто не может знать, что такое правильный разделитель строки. 11.08.2009

  • 2

    Что вы подразумеваете под «вернуть базовый класс, а также массив строк»?

    Если вы имели в виду метод ToString() базового класса, вы можете попробовать:

    base.ToString() + "\n" + String.Join("\n", theStringArray );
    
    10.08.2009
  • Я имел в виду вернуть метод ToString базового класса, а также массив строк из моего производного класса 11.08.2009

  • 3

    Мне кажется, что в вашем дизайне что-то не так, но, учитывая то, что вы сказали, нет возможности вернуть массив строк из метода ToString(). Таким образом, вам придется разграничить возвращаемое значение ToString() базового класса с производным.

    Такие как

    public override string ToString()
    {
       return base.ToString() + ':' + "whatever";
    }
    
    10.08.2009

    4

    Как упомянул Анри, верните base.ToString(), затем вы можете заменить двоеточие на \n с помощью String.Replace, а затем объединить его с вашей новой производной строкой.

    Конечно, вы можете просто использовать строку в своем производном классе, которая принимает форму «строка \n строка», а в функции ToString вы просто выполняете шаг замены, а затем объединяете две строки вместе. Ни массив, ни построитель строк не нужны. Если вы думаете, что их будет небольшое количество строковых значений для объединения, это может быть самый простой вариант. Нет массивов или построителя строк.

    10.08.2009

    5

    Как правило, лучше использовать Stringbuilder, чем объединять строки, используя длинную строку операций +.

    Если вы сделаете следующее:

    string sTemp = "This i" + "s an exa" + "ple string tha" + "t was broken.";
    

    Это фактически создаст семь строк в памяти.

    1. "Это я"
    2. "экза"
    3. "Это экзамен"
    4. "пожалуйста"
    5. "Это пример строки"
    6. "т был сломан."
    7. «Это пример строки, которая была сломана».

    Использование StringBuilder для той же функциональности создаст только пять, и по мере увеличения масштаба StringBuilder будет выполнять более быструю работу по объединению всех этих строк вместе, чем простое выполнение группы операторов + один за другим.

    Это особенно верно, когда ваш список конкатенаций не определен заранее, как в случае с вашим массивом строковых объектов.

    11.08.2009

    6

    Вы можете использовать возвращаемое значение ToString() из базового класса.

    Вы можете получить к нему доступ по

    база.ToString();

    10.08.2009
    Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..