为何listCurrentPostsMarkers会随listRemoveMarkers修改同步变化?
为什么两个List变量会同步变化?
这是C#里引用类型赋值的典型问题,我来给你掰扯清楚:
首先,List<T>是引用类型,和int、double这类值类型不一样。当你执行listRemoveMarkers = listCurrentPostsMarkers;的时候,你并没有复制整个列表的内容,只是把listRemoveMarkers这个变量指向了和listCurrentPostsMarkers完全相同的内存地址——简单说就是,两个变量现在共享同一个列表对象,就像两把钥匙开同一扇门。
所以当你调用listRemoveMarkers.RemoveAll(...)的时候,你其实是在修改那个共享的列表本身,而不是修改listRemoveMarkers指向的副本。这时候你再看listCurrentPostsMarkers,它指向的还是同一个列表,自然内容也跟着变了。
怎么解决?
如果你想让listRemoveMarkers是一个独立的副本,操作它不影响原列表,你需要创建一个新的List对象,把原列表的元素复制进去。比如:
// 方法1:用List的构造函数 listRemoveMarkers = new List<YourMarkerType>(listCurrentPostsMarkers); // 方法2:用LINQ的ToList()(需要引用System.Linq) listRemoveMarkers = listCurrentPostsMarkers.ToList();
这样两个变量就指向不同的列表对象了,修改其中一个不会影响另一个。
内容的提问来源于stack exchange,提问作者fine line
相关产品推荐
相关产品推荐

