Преобразование объекта в строку в C # [дубликат]

Я не использовал это сам, но я считаю, что он должен работать в теории (:

// service.ts
getSomething() {
  let subject: Subject = new Subject();
  this._restService.addRequest('object', 'method').run()
    .subscribe(subject);
  return subject;
}

// this can be removed (;
returnSomething() {
  return this.getSomething();
}

// component.ts
ngOnInit() {
  this.service.returnSomething()
    .subscribe(res => console.log(res), err => console.log(err));
}

Для получения дополнительной информации проверьте subject docs . Вы можете использовать разные типы например, BehaviorSubject имеет свойство value, доступ к которому вы можете получить ...

ngOnInit() {
  // if you use BehaviorSubject
  this.service.returnSomething().value
}

Вот рабочий рабочий блок ...

15
задан Shibu Thomas 27 November 2015 в 07:19
поделиться

6 ответов

Вы возвращаете строку, которая просто говорит фразу _name + _number + _date + _salary.

То, что вы, вероятно, хотели сделать, это построить строку, используя эти поля. Если вы хотите, чтобы все они были собраны вместе Concat , он был бы очень не читаемым

public override string ToString()
{
    return String.Concat(_name, _number, _date, _salary);
}

Однако было бы лучше использовать Format и включают метки со значениями

public override string ToString()
{
    return String.Format("Name:{0}, Number:{1}, Date:{2}, Salary:{3}",_name, _number, _date, _salary);
}

. Если вы используете C # 6 или новее, вы можете использовать следующий формат очистки

public override string ToString()
{
    return $"Name:{_name}, Number:{_number}, Date:{_date}, Salary:{_salary}";
}

. Который является точным той же логики, что и предыдущая версия String.Format.

31
ответ дан Scott Chamberlain 18 August 2018 в 13:21
поделиться

Скорее попробуйте что-то вроде

public override string ToString()
{
    return String.Format("Name : {0}, number {1}, date {2}, salary {3}",_name,_number,_date,_salary);
}

Но это не входит в класс

, поэтому

class Employee
{
    private string _name;
    private string _number;
    private int _date;
    private int _salary;

    .....

    public override string ToString()
    {
        return String.Format("Name : {0}, number {1}, date {2}, salary {3}",_name,_number,_date,_salary);
    }
}

Посмотрите на String.Format Method

Заменяет каждый элемент формата в указанной строке текстовым эквивалентом значения соответствующего объекта.

2
ответ дан Adriaan Stander 18 August 2018 в 13:21
поделиться
  • 1
    Или, возможно, String.Format() – zerkms 13 August 2013 в 05:04
  • 2
    @zerkms, просто изменил его на это. Будет также включать ссылку для ОП. – Adriaan Stander 13 August 2013 в 05:07

Если вы используете C # 6 (или более позднюю версию), используйте метод nameof() для имен свойств в строке в случае изменения имен свойств. Вы также можете использовать нотацию $"" вместо использования string.Format ().

Например:

public override string ToString()
{
    return $"{nameof(Name)}: {_name}";
}
0
ответ дан bytedev 18 August 2018 в 13:21
поделиться

Без переопределения ToString, если вы попытались «получить» строковое значение Employee, например

var employee1= new Employee(); Console.WriteLine(employee1);

Что вы получите:

ConsoleApplication1.Program + Employee

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

Я использую return _name + _number + _date + _salary;. По умолчанию используется строка,

или более подробный

return "Name:" + _name + " Number:" + _number + " etc...";

0
ответ дан Guy 18 August 2018 в 13:21
поделиться

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

Console.WriteLine(yourClassObject);

Если вы не переопределяете ToString(), тогда его реализация по умолчанию должна вернуть полное имя вашего объекта, например:

YourNamespace.YourClassName

Изменяя унаследованную реализацию (из System.Object), тогда вы можете сделать более приятное (чтение: более красивое) представление, например:

public override string ToString()
{
    return String.Format("This instance of my object has the following: Name = {0}, Number = {1}, Date = {2}, Salary = ${3}", _name, _number, _date, _salary);
}
7
ответ дан Karl Anderson 18 August 2018 в 13:21
поделиться

Вы можете попытаться отформатировать вывод в хорошем формате. (не проверено, хотя)

public override string ToString()
{
    return string.Format("Name: {0} Number: {1:n0} Date: {2:yyyy-MM-dd} Salary: {3:n2}", _name, _number, _date, _salary);
}

существует множество целей, переписывающих .ToString (), в зависимости от контекста. например,

  • некоторым разработчикам нравится иметь красиво отформатированное описание объекта при выполнении отладки, переписывание .ToString () позволит им иметь содержательное описание с некоторым идентификатором (например, идентификатор объекта );
  • Некоторые разработчики хотели бы поместить некоторый код сериализации в метод ToString ();
  • Некоторые разработчики даже ввели некоторый отладочный код в метод .ToString (), хотя это может быть не очень хорошая практика.

действительно зависит от контекста вашего необходимо. вы можете найти некоторые хорошие практики, чтобы следить за ними в Интернете - верьте, что в Интернете много ресурсов.

0
ответ дан Rex 18 August 2018 в 13:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: