我有List<QueueItem> QueueItemList
个对象列表。我按对象属性Status
过滤对象列表,并将过滤后的列表分配给processingList
。如果我将在QueueItemList列表中更改对象Status
属性,它是否也会在processingList
中更改?
public List<QueueItem> GetItems()
{
lock (Locker)
{
return QueueItemList.ToList();
}
}
var processingList = GetItems.Where(p => p.Status== QueueItemStatus.Processing).ToList();
答案 0 :(得分:2)
如果我将更改QueueItemList列表中的对象Status属性 是否会在processingList中更改?
是的,它会,除非QueueItem
是值类型(struct
)。如果它是class
,则它是引用类型,这意味着processingList
和QueueItemList
都指向其元素的完全相同的内存位置。那些变量只是指针。
答案 1 :(得分:2)
是的,因为您正在与相同的基础对象共享引用,假设当然列表中的项目是{{1 (或其他引用类型)而不是class
(值类型)。
请注意,您有两个独立的引用列表,但这些列表中的引用指向同一组对象。
如果您在一个列表中重新分配整个实例(如在struct
中),则重新分配将不会出现在另一个列表中,但我无法设想这样的用例,所以它不应该'是一个问题。
答案 2 :(得分:0)
是的,它也会在processingList中改变。
答案 3 :(得分:0)
是的,您将对同一个对象进行 N 次引用。换句话说:你将改变同一个对象。