Перегруженный оператор постинкремента и ToString() не выполняется в ожидаемом порядкеC#

Место общения программистов C#
Anonymous
Перегруженный оператор постинкремента и ToString() не выполняется в ожидаемом порядке

Сообщение Anonymous »

Я пишу генератор кода. Я создал простой класс для отступов:

Код: Выделить всё

internal class Indentation {
public int Indent {
get => indent;
set {
indent = value;
indentStr = new string(' ', Size * Indent);
}
}
int Size { get; set; }
string indentStr;
private int indent;

public Indentation(int Size = 4) {
this.Size = Size;
indentStr = new string(' ', Size * Indent);
}

public override string ToString() {
return indentStr;
}

static public Indentation operator --(Indentation indentation) {
indentation.Indent--;
return indentation;
}
static public Indentation operator ++(Indentation indentation) {
indentation.Indent++;
return indentation;
}
}
Когда я использую его, я ожидаю, что обе строки печати ниже будут напечатаны одинаково.

Код: Выделить всё

int i = 4;
Indentation indent = new();
Debug.WriteLine(($"{i}|{indent}|public class ... {{"));
Debug.WriteLine(($"{i++}|{indent++}|public class ... {{"));
Вместо этого я получаю:

Код: Выделить всё

4||public class ... {
4|    |public class ... {
Целое число, как и ожидалось, напечатано до пост-инкремента, тогда как отступ печатается после приращения.
Есть ли способ заставить отступ печатать до приращения? Что-то не так при перегрузке операторов (я не смог найти ничего полезного, а документация Microsoft скудна)?

Подробнее: https://stackoverflow.com/questions/799 ... expected-o

Вернуться в «C#»