gpt4 book ai didi

c# - 单步执行我的程序时,无缘无故地调用 ToString() 方法

转载 作者:行者123 更新时间:2023-12-02 14:51:58 24 4
gpt4 key购买 nike

这是一个奇怪的问题,连我旁边的高级程序员也很困惑。完整的问题是,我的 ToString() 方法正在被调用,但我不知道或不明白这是我的代码

static void Main(string[] args)
{
Console.Out.WriteLine("Blank Constructor");
Form form = new Form(); <-- ToString() gets called on this line.
form.ToString();

Console.Read();
}

public Form()
{
FormName = "";
FormImageLocation = "";
FormDescription = "";

FormID = 0;

CreatedDate = DateTime.Now;
LastUpdate = DateTime.Now;

Fields = new List<Field>();
Packets = new List<Packet>(); <-- This line in the constructor
}

public override string ToString()
{
string returnString;
returnString = " Form Name: " + FormName + " Form Image Location: " + FormImageLocation + "Form Description: " + FormDescription + " FormID: " + FormID + " Created Date: " + CreatedDate + " LastUpdate: " + LastUpdate ;

if (fields.Count != 0)
{
foreach (var field in fields)
{
returnString += field.ToString();
}
}
else
{
returnString += "!!! This Form has no Fields !!!";
}

if (Packets.Count != 0)
{
foreach (var packet in Packets)
{
returnString += packet.ToString();
}
}
else
{
returnString += " !!! This Form does not belong to any Packets !!!";
}

Console.Out.WriteLine(returnString);
return returnString;
}

public Packet(string packet_name, List<Form> list_of_forms)
{
PacketName = packet_name;
forms = list_of_forms;
}

这种看似随机的 ToString() 打印仅在我单步执行程序时发生。它将在我上面指定的行上打印,并且当构造函数退出时,当我单步执行 ToString() 方法本身时,它会疯狂地打印。我在 ToString() 中放置了一个断点,但只有在合法调用 ToString() 时,它才会停止在断点上,因此要清楚,当我单步执行时它进行随机打印,并且不会在 ToString() 内的断点处停止。我检查并删除了对 ToString() 的所有调用,但它仍然被随机调用,当我注释掉 returnString 变量并返回“her there”时,问题就出现了离开但这没有任何帮助。如果我只是在没有断点的情况下运行程序,则不会出现此问题。你们中的一些人可能会说,如果它在运行时有效,那并不重要,但这让我非常警惕,如果我在路上遇到代码问题,并且我尝试单步执行代码来找到问题,我会得到不同的结果并妨碍调试。我尝试涵盖整个问题以及我尝试过的内容并提供所需的所有代码,如果我不清楚某些内容,请告诉我,我会尝试再次解释。最后,我使用的是 Windows 7 64 位计算机,并且使用的是 Visual Studio C# 2010 Express。

最佳答案

您可能在表单上有一个监视,或者以其他方式在调试器中显示它的值(通过“本地”窗口、堆栈跟踪等)。调试器使用 ToString 来显示对象。如果这是您的程序中的问题,您应该重新设计您的 ToString,这样它就不会像这样被调用,或者只是避免使用调试器。

您通常希望避免使用非常“昂贵”的 ToString ,这是一种需要警惕的情况。偶尔会有异常(exception),它确实有意义,但调用者通常期望它是一个廉价的操作。考虑使用其他一些方法/属性来表示更复杂的显示字符串是否合适,从而留下更简单/更便宜的 ToString 实现。

关于c# - 单步执行我的程序时,无缘无故地调用 ToString() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20980503/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com