Using an array's SetValue method vs. the [] indexers
Asked Answered
U

1

15

I noticed that arrays have the SetValue method, which seems a little out of place when you could just use the indexers. Is there some special purpose for SetValue? The MSDN article didn't seem to say what SetValue was for, just how to use it. Which method would be more efficient to use as far as speed goes?

Ung answered 16/5, 2012 at 21:20 Comment(0)
J
19

Sometimes all you have of an array is that it's an Array. The Array class does not have indexers, so the best way to set/get element values on it is via the GetValue and SetValue methods. For example:

private void M(Array array) 
{
    array[0] = 5;         // <-- Compiler error
    array.SetValue(5, 0); // <-- Works
}
Jamieson answered 16/5, 2012 at 21:23 Comment(4)
Also, if you do not know the number of dimensions of the array at compile time, you can use the SetValue(Object, Int32[]) overload to specify the elements at runtime: msdn.microsoft.com/en-us/library/758awxk7.aspxBouleversement
Where does the indexes start? One would expect 0, but today I encountered a value returned from a COM component with a .NET type of Array, but the indexes started at 1, not 0.Thomasson
@PeterMortensen, COM is indeed a scary place. :) But that's interesting information.Jamieson
@PeterMortensen, the lower bound of a single dimensional array can be found using Array.GetLowerBound(0). For multidimensional arrays replace 0 with whatever dimension you're interested in.Kinslow

© 2022 - 2024 — McMap. All rights reserved.