This should work the exact same way in C#. I'd wager you're looking at the value of trailFlags rather than the value of trailFlags[index] - these are not the same. trailFlags is the memory location that the data is stored at, trailFlags[index] is the actual data.
Direct3D has need of instancing, but we do not. We have plenty of glVertexAttrib calls.