Я пытаюсь переопределить метод ToString()
, чтобы вернуть значение поля в моем классе и очистить это поле (вернуть значение только один раз).Я заметил, что код, кажется, работает, когда я запускаю его без какого-либо прерывания до конца (по крайней мере, передайте переопределенный метод), но при пошаговой отладке он не возвращает никакого значения, и похоже, что естьв начале объекта не хранится никакого значения.
Мне удалось решить эту проблему, изменив имя метода с ToString()
на другое не переопределенное имя, также комментируя строку text = "";
, что делает егоработать, но я не знаю почему.То же самое происходило, когда я пытался присвоить значение StringBuilder для temp var, очистить StringBuilder и вернуть значение temp.Мне любопытно, что вызывает такое странное поведение.
class Program
{
public class MyClass
{
private string text = "some value";
public override string ToString()
{
string temp = text;
text = "";
return temp;
}
}
public class MyClass2
{
private string text = "some value";
public override string ToString()
{
return text;
}
}
static void Main(string[] args)
{
MyClass obj = new MyClass();
MyClass2 obj2 = new MyClass2();
Console.WriteLine("1 MyClass: " + obj.ToString());
Console.WriteLine("1 MyClass2: " + obj2.ToString());
Console.WriteLine("2 MyClass: " + obj.ToString());
Console.WriteLine("2 MyClass2: " + obj2.ToString());
Console.WriteLine("Press any key to exit");
Console.ReadKey();
}
}
Когда я запускаю код для ReadKey ();без прерываний вывод:
1 MyClass: some value
1 MyClass2: some value
2 MyClass:
2 MyClass2: some value
Press any key to exit
При пошаговом выполнении кода с F10 вывод:
1 MyClass:
1 MyClass2: some value
2 MyClass:
2 MyClass2: some value
Press any key to exit