我有一些代碼看起來是這樣的:ToList(LINQ)似乎並沒有複製引用
var selectedItems = ItemList.SelectedItems().ToList();
var selectedItems2 = ItemList2.SelectedItems().ToList();
selectedItems[0] = selectedItems2[0];
下面就來看看在SelectedItems
擴展方法:
public static IEnumerable<T> SelectedItems<T>(this IEnumerable<T> source) where T : ISelectable
{
return source.Where(s => s.IsSelected);
}
每當我做了ReferenceEquals(ItemList, selectedItems)
,該值返回false
,並且每當我修改任何列表中的值時,更改都不會反映在另一個列表中。
ItemList
中的項目是引用類型(自定義類)。
我在做什麼錯?
編輯:
這是原始代碼。我不想過分複雜化的東西,但這裏仍然是:
var test = Map.TileMap.Layers[0].TileList.SelectedItems().ToList();
if (ReferenceEquals(test[0], Map.TileMap.Layers[0].TileList[0]))
{
// returns true
}
var tileset2D = Tileset.TileMap.Layers[0].TileList.SelectedItems().To2D(t => t.SelectableRegion.Y).ToList();
test[0] = tileset2D[0][0];
// test[0] has changed but Tileset.TileMap.Layers[0].TileList[0] hasn't changed.
這裏的To2D擴展方法:
public static IEnumerable<IEnumerable<T>> To2D<T, TKey>(this IEnumerable<T> source, Func<T, TKey> keySelector)
{
if (source == null)
{
throw new ArgumentNullException(nameof(source), "Source collection cannot be null");
}
return source.GroupBy(keySelector);
}
'ItemList'的來源是什麼? 'IQueryable' /'List'/ etc。? –
Caramiriel
列表。 T是可選的。 –
CodingMadeEasy
幾乎聽起來像那個列表已經由不同的實體構建而成。在過濾之前確定'ReferenceEquals(ItemList [0],ItemList2 [0])== true'嗎? – Caramiriel