gpt4 book ai didi

c# - 使用对象初始值设定项时如何正确使用断点?

转载 作者:行者123 更新时间:2023-11-30 17:19:15 24 4
gpt4 key购买 nike

例如,做这样的事情:

foreach (DataRow row in data.Rows)
{
Person newPerson = new Person()
{
Id = row.Field<int>("Id"),
Name = row.Field<string>("Name"),
LastName = row.Field<string>("LastName"),
DateOfBirth = row.Field<DateTime>("DateOfBirth")
};

people.Add(newPerson);
}

无法为单个分配设置断点,断点设置为整个 block 。

如果我想具体查看我的代码在哪里出错,我必须使用:

 foreach (DataRow row in data.Rows)
{
Person newPerson = new Person();
newPerson.Id = row.Field<int>("Id");
newPerson.Name = row.Field<string>("Name");
newPerson.LastName = row.Field<string>("LastName");
newPerson.DateOfBirth = row.Field<DateTime>("DateOfBirth");

people.Add(newPerson);
}

或者也许我遗漏了什么。 您可以在使用对象初始值设定项时正确调试吗?

最佳答案

对象初始化器只是语法糖,在编译时会被翻译。你原来的对象初始化器变成这样:

var temp = new Person();
temp.Id = row.Field<int>("Id");
temp.Name = row.Field<string>("Name");
temp.LastName = row.Field<string>("LastName");
temp.DateOfBirth = row.Field<DateTime>("DateOfBirth");
var person = temp;

因为整个 block 都是这样翻译的,所以你不能在一步内中断。如果您绝对需要在某个特定步骤上中断,您有几种选择。

  1. 打破它。调试时不要使用对象初始值设定项,您可以在事后将它们放回去。

  2. 临时变量。而不是分配 Id = row.Field<int>("Id")直接分配 row.Field<int>("Id")首先分配给临时变量(或您要调试的任何一个),然后将临时变量分配给对象初始值设定项属性。

  3. 方法调用。您可以将一些代码包装在自定义方法调用中,仅允许您在自定义方法中添加断点。你甚至可以这样概括它:

    Id = BreakThenDoSomething(() => row.Field<int>("Id"));

public static T BreakThenDoSomething<T>(Func<T> f)
{
Debugger.Break();
return f();
}

关于c# - 使用对象初始值设定项时如何正确使用断点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5112782/

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