Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.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#_Object_Generic List - Fatal编程技术网

C# 列表对象引用

C# 列表对象引用,c#,object,generic-list,C#,Object,Generic List,我有一个对象列表QueueItemList。我正在按对象属性状态过滤对象列表,并将过滤后的列表指定给processingList。如果我将更改QueueItemList中的对象状态属性,它是否也将在processingList中更改 如果我要更改QueueItemList中的对象状态属性 它是否也将在processingList中更改 是的,它会,除非QueueItem是值类型结构。如果它是一个类,那么它就是一个引用类型,这意味着processingList和QueueItemList都指向其元

我有一个对象列表QueueItemList。我正在按对象属性状态过滤对象列表,并将过滤后的列表指定给processingList。如果我将更改QueueItemList中的对象状态属性,它是否也将在processingList中更改

如果我要更改QueueItemList中的对象状态属性 它是否也将在processingList中更改

是的,它会,除非QueueItem是值类型结构。如果它是一个类,那么它就是一个引用类型,这意味着processingList和QueueItemList都指向其元素的完全相同的内存位置。这些变量只是指针

如果我要更改QueueItemList中的对象状态属性 它是否也将在processingList中更改


是的,它会,除非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();