gpt4 book ai didi

c# - 数组中的反射和递归 - StackOverflowException

转载 作者:太空宇宙 更新时间:2023-11-03 12:45:48 25 4
gpt4 key购买 nike

我有两个类(class):

public class Customer
{
public string FirstName { get; set; }

public string LastName { get; set; }

public bool isActif { get; set; }

public Product[] Product { get; set; }
}

public class Product
{
public string Id { get; set; }
}

还有两个实例:

Customer Customer1 = new Customer
{
FirstName = "FirstName1",
LastName = "LastName1",
isActif = true,
Product = new Product[]
{
new Product()
{
Id = "1"
}
}
};

Customer Customer2 = new Customer
{
FirstName = "FirstName2",
LastName = "LastName2",
isActif = false,
Product = new Product[]
{
new Product()
{
Id = "2"
}
}
};

我有一种方法可以比较两个实例的所有属性:

但是当我到达属性 Product 时,我生成了一个 StackOverflowException。为什么 ?如果它是一个数组,如何循环属性?

编辑:当我使用列表时,没有 StackOverflowException 但有 System.Reflection.TargetParameterCountException。如果它是一个数组,如何循环属性

最佳答案

在:

foreach (PropertyInfo propertyInfo in
objectType.GetProperties(BindingFlags.Public | BindingFlags.Instance)
.Where(x => x.CanRead))

更改您的 where 条件:

 .Where(x => x.CanRead && x.Name != "SyncRoot")

SyncRoot documentation

如果你这样做:

Console.WriteLine(Customer1.Product.Equals(Customer1.Product.SyncRoot));

您将看到 Customer1.Product 等于其 SyncRoot 属性。因此,当您在 Product 属性上使用 AreEquals 方法时,您将到达与 Product 属性相同的 SyncRoot 属性。那么你将永远无法离开循环。 (因为 SyncRoot 有一个 SyncRoot 属性指向它自己)

关于c# - 数组中的反射和递归 - StackOverflowException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37375821/

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