ObservableCollection<T>.Move Method
Moves the item at the specified index to a new location in the collection.
Assembly: System (in System.dll)
Parameters
- oldIndex
- Type: System.Int32
The zero-based index specifying the location of the item to be moved.
- newIndex
- Type: System.Int32
The zero-based index specifying the new location of the item.
Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2
The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
Failing move removes moved item.
Trying to move an item to a location outside the collection throws an exception (that's okay) but also removes the item to be moved (that's very bad). Try:
The call to Move throws an ArgumentOutOfRangeException. That's okay since the new index is out of range indeed. But the item that has been at index 1 before the call has gone afterwards! The reason is that the item to be moved is first removed and then inserted again, and the index of the new location is only checked by the inserting. Hence the removing has already happened when the exception is thrown.
Conclusion: The index should be checked at the beginning of the moving.
var oc = new ObservableCollection<String>() { "A", "B", "C", "D", "E" };
var item1 = oc[1];
try { oc.Move(1, oc.Count); }
catch ( ArgumentOutOfRangeException ) { /* do something */ }
var containsItemToBeMoved = oc.Contains(item1); // FalseThe call to Move throws an ArgumentOutOfRangeException. That's okay since the new index is out of range indeed. But the item that has been at index 1 before the call has gone afterwards! The reason is that the item to be moved is first removed and then inserted again, and the index of the new location is only checked by the inserting. Hence the removing has already happened when the exception is thrown.
Conclusion: The index should be checked at the beginning of the moving.
- 4/18/2012
- gi1
- 4/29/2012
- Thomas Lee