我遇到了以下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/