как включить метод void в метод переопределения ToString в C# - PullRequest
0 голосов
/ 01 августа 2020

Хорошо, поэтому я пытаюсь написать список в методе переопределения ToString. Я думал, может быть, сделать это с делегатами, но делегаты требуют, чтобы методы были stati c, и я не хочу, чтобы это было stati c.

Пожалуйста, взгляните на мой код ниже и помогите мне любым другим способом, который может быть:

private void Print()
    {
        foreach(var i in Lista)
        {
            Console.Write(i);
        }
    }


    public override string ToString()
    {
        return base.ToString() + Print();
    }

, это дает мне ошибку «Оператор + не может быть применен к операндам типа string и void»

Спасибо за любую вашу помощь !

Ответы [ 2 ]

1 голос
/ 01 августа 2020

В вашем коде метод Print объявлен недействительным. Поэтому его нельзя использовать в конкатенации с возвращаемым значением из base.ToString () . Вместо этого вы можете изменить Print для возврата строки, а затем вы можете вызвать ее из своего переопределения

Так, например:

private string Print()
{
    StringBuilder sb = new StringBuilder();
    foreach(var i in Lista)
    {
        sb.Append(i);
        // or sb.AppendLine(i) if you want a newline added
    }
    return sb.ToString();
}


public override string ToString()
{
    return base.ToString() + Print();
}

Это решение, конечно, ничего не печатает в приставка. Вместо этого он возвращает строку, которую вызывающий может решить вывести на консоль или записать в файл. Не используйте ie общий c класс для его среды вывода. (Если только область действия самого класса не заключается в выводе его содержимого на консоль / файл / принтер / et c ...).

0 голосов
/ 01 августа 2020

Вы можете просто отклонить метод и вернуться к вызывающему:

private List<string> Lista = new List<string> { "one", "two", "three" };

public override string ToString()
{
   return $"{base.ToString()} {String.Join(',', Lista)}";
}

Если вы действительно хотите напечатать на консоли:

private void Print()
{
    Lista?.ForEach(x => { Console.Write($"{x} "); });
}

public override string ToString()
{
    Print();
    return base.ToString();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...