以编程方式更新 SharePoint 中的多个字段

Update multiple fields in SharePoint programmatically

我正在尝试更新 SharePoint 中多个字段(具有相同名称)的一些属性。

我试过这个:

var site = this.Site.RootWeb;
var fields = site.Fields;

        foreach (SPField field in fields)
        {
            if (field.Group.Contains("My Custom Columns"))
            {
                if (field.Title.Contains("Custom field"))
                {
                    if (field.DefaultValue != null) {
                        field.DefaultValue = null;
                        field.Update(true);
                    }                      
                }
            }
        }

它用名称 "Custom field" 更新了第一列,但在它给我这个错误之后:

Collection was modified; enumeration operation may not execute.  
at Microsoft.SharePoint.SPBaseCollection.SPEnumerator.System.Collections.IEnumerator.MoveNext()  

是否无法在 foreach 循环中更新对象?

我认为问题出在你的

foreach (SPField field in fields)

行代码。您实质上是在修改循环访问的集合。

我建议您尝试循环并将所有字段的 ID 放入

List<GUID>

然后对该集合执行 foreach 语句以获取每个字段并更新其值。

List<Guid> guidsList = new List<guid>();
foreach (SPField field in fields)
    {
        if (field.Group.Contains("My Custom Columns"))
        {
            if (field.Title.Contains("Custom field"))
            {
guidsList.add(field.id)

            }
        }
    }

foreach(Guid currentFieldId in guidsList){
//Get your field 
//Update what needs to be updated
}

非常感谢

特鲁兹

出现此错误是因为您在迭代时试图修改字段集合。

解决方案是替换行:

foreach (SPField field in fields)

foreach (var field in fields.Cast<SPField>().ToList())