我遇到了以下C#函数:

    void SomeMethod(List<ISomeInterface> inputObjects)
    {
        IList<ISomeInterface> newListOfObjects = null;

        if (inputObjects != null)
        {
            //create a new list
            newListOfObjects = new List<ISomeInterface>();
            //copy the input parameter into the new list
            foreach (ISomeInterface thing in inputObjects)
            {
                newListOfObjects.Add(thing);
            }
        }
        //send an event to another module with the new list as parameter
        DelegateHandler.AsyncInvoke(this.SomeEvent, newListOfObjects);
    }


我的问题是:是否有必要创建一个对象作为SomeEvent的参数?如果我只是将inputObjects作为参数传递给SomeEvent,会发生什么情况?
我猜想垃圾回收器可能看不到对inputObjects的引用,并且会在SomeMethod完成时将其删除。

最佳答案

无需复制列表。垃圾收集器将知道对象本身仍在使用中,不会对其进行垃圾收集。

传递副本和原始副本之间的区别在于,如果传递原始副本,则对列表的任何修改也将在调用方法中可见,否则,仅对副本进行修改

关于c# - 这段代码为事件的参数创建新对象是否正确?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16565900/

10-09 04:37