C# 列表对象引用
我有一个对象列表QueueItemList。我正在按对象属性状态过滤对象列表,并将过滤后的列表指定给processingList。如果我将更改QueueItemList中的对象状态属性,它是否也将在processingList中更改 如果我要更改QueueItemList中的对象状态属性 它是否也将在processingList中更改 是的,它会,除非QueueItem是值类型结构。如果它是一个类,那么它就是一个引用类型,这意味着processingList和QueueItemList都指向其元素的完全相同的内存位置。这些变量只是指针 如果我要更改QueueItemList中的对象状态属性 它是否也将在processingList中更改C# 列表对象引用,c#,object,generic-list,C#,Object,Generic List,我有一个对象列表QueueItemList。我正在按对象属性状态过滤对象列表,并将过滤后的列表指定给processingList。如果我将更改QueueItemList中的对象状态属性,它是否也将在processingList中更改 如果我要更改QueueItemList中的对象状态属性 它是否也将在processingList中更改 是的,它会,除非QueueItem是值类型结构。如果它是一个类,那么它就是一个引用类型,这意味着processingList和QueueItemList都指向其元
是的,它会,除非QueueItem是值类型结构。如果它是一个类,那么它就是一个引用类型,这意味着processingList和QueueItemList都指向其元素的完全相同的内存位置。这些变量只是指针。是的,因为您正在共享对同一基础对象的引用,当然假设列表中的项是类或其他引用类型,而不是结构值类型 请注意,您有两个独立的引用列表,但这些列表中的引用指向同一组对象
如果您在一个列表中重新分配整个实例,如在列表[0]=new MyClass中,重新分配将不会在另一个列表中发生,但我无法设想这样做的用例,因此这不应该是一个问题。是,因为您共享对同一基础对象的引用,当然,假设列表中的项是类或其他引用类型,而不是结构值类型 请注意,您有两个独立的引用列表,但这些列表中的引用指向同一组对象
如果将整个实例重新分配到一个列表中,如列表[0]=new MyClass中所示,则重新分配不会发生在另一个列表中,但我无法设想这样做的用例,因此这不应该引起关注。是,它也会在processingList中更改。是,它也会在processingList中更改。是,您将有N个对同一对象的引用。换句话说,您将更改同一对象。是的,您将有N个对同一对象的引用。换句话说:您将更改同一对象。除了下面提供的所有答案之外,请在下面提供的所有答案之外签出,签出以便在这种情况下,如果在QueueItemList中筛选后更改了筛选对象状态属性,processingList可能会有不正确的结果?因此,在这种情况下,如果在QueueItemList中筛选后更改了筛选对象状态属性,processingList可能会有不正确的结果?
public List<QueueItem> GetItems()
{
lock (Locker)
{
return QueueItemList.ToList();
}
}
var processingList = GetItems.Where(p => p.Status== QueueItemStatus.Processing).ToList();