gpt4 book ai didi

c# - 循环引用时 .NET 单元测试中的 StackOverflow

转载 作者:行者123 更新时间:2023-11-30 20:16:40 24 4
gpt4 key购买 nike

当我注意到:

    public class Foo
{
private Bar myBar = new Bar();
}

public class Bar
{
private Foo myFoo = new Foo();
}

[Fact]
public void CircularReferenceTest()
{
var foo = new Foo();
var bar = new Bar();
}

导致 XUnit 运行器暂停和控制台日志:

The active test run was aborted. Reason: Process is terminated due to StackOverflowException.

我在 MStest 上进行了测试,结果相同。有没有解决的办法?这是一个错误,还是旨在以这种方式停止执行?

最佳答案

您没有进行循环引用。你正在制作一堆指向另一个的引用(如果你说是链表),最终它会导致堆栈溢出异常,因为堆栈已满。

下面是循环引用的方法。我认为您不能将字段保留为私有(private),因为两个类在某些时候必须以某种方式相互了解。 (即在某些时候必须建立这种联系)

public class Foo
{
public Bar MyBar { get; set; }
}

public class Bar
{
public Foo MyFoo { get; set; }
}

public void CircularReferenceTest()
{
var foo = new Foo();
var bar = new Bar();

foo.MyBar = bar;
bar.MyFoo = foo;
}

关于c# - 循环引用时 .NET 单元测试中的 StackOverflow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48392039/

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