C# 在ToList()期间,是否可以由另一个线程修改集合

C# 在ToList()期间,是否可以由另一个线程修改集合,c#,.net,C#,.net,够了,或者我需要在访问\u list时使用锁吗list中没有多线程保护,因此是的,另一个线程可以在ToList调用期间修改列表。结果可能是: 一切正常,结果列表具有新值 一切正常,结果列表没有新值 它会使硬盘着火(或其他未定义的行为) 基本上,在没有外部同步的情况下使用来自多个线程的列表,是不安全的,除非所有线程都只是从中读取。您可能需要同步(例如,使用而不是列表,或者自己处理同步),或者需要同步收集,例如。No;你不能这么做。你会考虑使用吗?它是昂贵的吸气剂,我想实际上在让测试运行一段时间

够了,或者我需要在访问
\u list
时使用锁吗
list
中没有多线程保护,因此是的,另一个线程可以在
ToList
调用期间修改列表。结果可能是:

  • 一切正常,结果列表具有新值
  • 一切正常,结果列表没有新值
  • 它会使硬盘着火(或其他未定义的行为)

基本上,在没有外部同步的情况下使用来自多个线程的
列表
,是不安全的,除非所有线程都只是从中读取。您可能需要同步(例如,使用而不是
列表
,或者自己处理同步),或者需要同步收集,例如。

No;你不能这么做。你会考虑使用吗?它是昂贵的吸气剂,我想实际上在让测试运行一段时间后,它扔<代码>目的地数组不够长。检查destinex和length,以及数组的下限。这足够让我的硬盘着火了。谢谢你,乔恩
class Sample
{
    private List<int> _list;
    public List<int> List
    {
        get 
        { 
            return _list.Select(p => p + p).Where(q => q % 2 == 0).ToList(); 
        }
    }

    public void Add(int n)
    {
        _list.Add(n);
    }

    public void Remove(int n)
    {
        _list.Remove(n);
    }
}
return _list.ToList().Select(p => p + p).Where(q => q % 2 == 0);