相关疑难解决方法(0)

在LINQ查询中调用ToList()或ToArray()会更好吗?

我经常遇到我想在我声明它的地方评估查询的情况.这通常是因为我需要多次迭代它并且计算起来很昂贵.例如:

string raw = "...";
var lines = (from l in raw.Split('\n')
             let ll = l.Trim()
             where !string.IsNullOrEmpty(ll)
             select ll).ToList();
Run Code Online (Sandbox Code Playgroud)

这很好用.但是,如果我不打算修改结果,那么我不妨打电话给ToArray()而不是ToList().

我想知道是否ToArray()通过第一次调用实现,ToList()因此内存效率低于仅调用ToList().

我疯了吗?我应该只是打电话ToArray()- 安全且安全地知道内存不会被分配两次吗?

.net linq performance

488
推荐指数
15
解决办法
8万
查看次数

如何在迭代时从通用列表中删除元素?

我正在寻找一个更好的模式来处理每个需要处理的元素列表,然后根据结果从列表中删除.

你不能.Remove(element)在里面使用foreach (var element in X)(因为它导致Collection was modified; enumeration operation may not execute.异常)...你也不能使用for (int i = 0; i < elements.Count(); i++),.RemoveAt(i)因为它会扰乱你在集合中的当前位置i.

有一种优雅的方式来做到这一点?

c# generics loops list key-value

418
推荐指数
15
解决办法
35万
查看次数

收集被修改; 枚举操作可能无法在ArrayList中执行

我正在尝试删除一个项目ArrayList,我得到这个例外:
Collection was modified; enumeration operation may not execute.

有任何想法吗?

c# collections enumeration exception

78
推荐指数
6
解决办法
17万
查看次数

C#:收藏被修改; 枚举操作可能无法执行

我的目标是从我的应用程序中的用户列表中删除用户.但我无法理解此错误的底部.有人请保释我.

if (txtEmailID.Text.Length > 0)
{
    users = UserRespository.GetUserName(txtEmailID.Text);
    bool isUserAvailable=false;
    foreach (EduvisionUser aUser in users) // Exception thrown in this line
    {
        isUserAvailable = true;
        if(!aUser.Activated)
        {
            users.Remove(aUser);
        }
    }
    if (users.Count == 0 && isUserAvailable)
    {
        DeactivatedUserMessage();
        return;
    }
}
Run Code Online (Sandbox Code Playgroud)

c# enumeration

4
推荐指数
2
解决办法
2万
查看次数