1

我需要为所有列表创建一个视图。该视图必须显示必填字段(在每个列表中都不同)。

检索第二个列表时,一切都出错了。第一个 for-each 给出以下错误消息:

收藏已修改;枚举操作可能无法执行

我真的不知道为什么我会得到这个错误。

    public override void FeatureActivated(SPFeatureReceiverProperties properties)
    {
        SPWeb myWeb = SPContext.Current.Web;
        SPListCollection myLists = myWeb.GetListsOfType(SPBaseType.DocumentLibrary);
        StringCollection viewFields = new StringCollection();
        String viewName = "Mandatory fields view";
        String query = "<OrderBy><FieldRef Name='Modified'/></OrderBy><Where><Eq><FieldRef Name='Author'/><Value Type='Integer'><UserID Type='Integer' /></Value></Eq></Where>";

        foreach (SPList list in myLists)
        {
         foreach (SPField field in list.Fields)
            {

                if (field.Required)
                {
                    viewFields.Add(field.ToString());
                }

            }
            list.Views.Add(viewName, viewFields, query, Int32.MaxValue, true, false);
            viewFields.Clear();
        }
    }
4

2 回答 2

1

或者您可以只使用 for 循环而不是 foreach:

for(int i = 0; i< myLists.Count; i++){
  SPList list = myLists[i];
  //etc..
}
于 2013-11-14T10:07:04.270 回答
0

尝试更改foreach (SPList list in myLists)foreach (SPList list in myLists.ToList()). 这会将 myLists 的值复制到在每个 foreach 循环期间无法修改的单独列表。

于 2013-11-13T19:31:28.717 回答