Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 错误:集合已修改;枚举操作不能执行。其他解决方案对我不起作用_C#_Sharepoint_Foreach - Fatal编程技术网

C# 错误:集合已修改;枚举操作不能执行。其他解决方案对我不起作用

C# 错误:集合已修改;枚举操作不能执行。其他解决方案对我不起作用,c#,sharepoint,foreach,C#,Sharepoint,Foreach,我正在删除Sharepoint网站中的用户,因此出现此错误。 这是我的密码: foreach (SPUser user in users) { string user_name = user.LoginName; string[]username = user_name.Split('\\'); user_name = username[1].ToString().ToLower(); bool exists= checkIfExists(user_nam

我正在删除Sharepoint网站中的用户,因此出现此错误。 这是我的密码:

foreach (SPUser user in users) 
{
    string user_name = user.LoginName;

    string[]username = user_name.Split('\\');
    user_name = username[1].ToString().ToLower();


    bool exists= checkIfExists(user_name);
    if (exists != true)
    {

        users.Remove(user.LoginName);
    }
}
我读过类似的问题,但我发现的解决方案对我不起作用,因为我不能使用ToList()或ToArray()方法。

如果不能直接使用ToList()或ToArray(),请创建一个新列表,并将
用户的项目添加到该列表中,然后在
foreach
循环中使用该新列表


虽然很明显,您的
用户
实现了
IEnumerable
接口(否则您将无法在foreach循环中使用它),但ToArray()是解决问题的首选方法。也许您不能使用ToArray(),因为实现不是泛型的?在这种情况下,请尝试
users.OfType().ToArray()

假设您的收藏真的太大了(然后您不能使用
ToArray()
ToList()
,我看不出您必须避免它们或通过
.Cast().ToArray()的任何其他原因)
如果它没有实现
IEnumerable
,但只实现
IEnumerable
),那么首先创建一个必须删除的项目集合

    var usersToRemove = new List<SPUser>();
    foreach (var user in users) {
        string user_name = user.LoginName;

        string[]username = user_name.Split('\\');
        user_name = username[1].ToString().ToLower();

        if (!checkIfExists(user_name))
            usersToRemove.Add(user.LoginName);
    }
}
编辑进行总结:如果可能,将用户转换为数组(使用
users.ToArray()
或使用
users.Cast().ToArray()
,如果未实现
IEnumerable
):

或:

为什么不能使用
ToList
ToArray
?你尝试了什么,失败了什么?
foreach (var userToRemove in usersToRemove)
    users.Remove(userToRemove);
foreach (var user in users.ToArray()) {
foreach (var user in users.Cast<SPUser>().ToArray()) {
var usersToRemove = users
    .Select(x => x.Split('\\')[1].ToLower())
    .Where(x => !checkIfExists(x))
    .ToArray();

foreach var userToRemove in usersToRemove)
    users.Remove(userToRemove);