我有一个具有以下结构的对象:(伪代码)

class Client
{
- int ID
- int? ParentID
- string Name
- datetime CreateDate
- int ACClientID
- List <Client> Clients }


我想使用递归foreach遍历整个嵌套结构,以将ALL的ACClientID设置为一个值。

我知道foreach中的枚举数是不可变的,因此以下内容不起作用:

 private static bool AssignToChildren(ref ATBusiness.Objects.Client client, int ACClientID)
        {
            client.ACClientID = ACClientID;

            foreach (ATBusiness.Objects.Client child in client.Clients)
            {
                AssignToChildren(ref child, ACClientID);
            }
        }


实现目标的最有效方法是什么?

PS:我不会在结构中添加或删除,而只是为每个嵌套的Client对象设置一个属性。

[edit]我查看了What is the best way to modify a list in a 'foreach' loop?,但它没有为我提供所需的答案。

最佳答案

由于您从未分配给参数client,因此无需使用ref传递它。

由于您自己没有修改List<T>对象,因此即使在枚举期间也没有理由不能修改ACCClientID属性。仅当您尝试篡改枚举背后的列表成员资格时,您才会获得异常。

10-06 05:14