В Delphi есть функции Low() и High(), которые возвращают самое нижнее и самое верхнее измерения индекса для массива. Это помогает устранить подверженные ошибкам циклы for для итерации массива, который может стать жертвой коварной ошибки границы массива +1/-1, например, используя ‹=, когда вы имели в виду ‹ для условия завершения в инструкции for loop.
Вот пример для функций Low/High (в Delphi):
for i := Low(ary) to High(ary) do
Сейчас я использую простой оператор for loop в C#:
for (int i = 0; i < ary.Length; i++)
Я знаю, что существует метод Array GetDimension(N), но у него есть свои недостатки, поскольку я могу внести ошибку, случайно используя неправильный индекс измерения. Я думаю, что мог бы что-то сделать с перечислителями, но я беспокоюсь, что при сканировании большого массива производительность будет значительно снижаться по сравнению с использованием цикла for. Есть ли эквивалент High/Low в C#?
InvalidCastException
, если вы попробуете его в исходном коде компиляции С#... интересно 24.03.2013IList<byte>
вместоbyte[]
. 24.03.2013byte[]
, но не дляbyte[,]
(или других многомерных массивов). В C#byte[,]
не нужно индексировать с [0, 0]. 24.03.2013Array
. Я понимаю, что последний используется для реализации первого. 24.03.2013for (int i = 0; i < arr.Length; i++)
только в том случае, еслиarr
является локальной переменной. Если это поле, оптимизация не может быть выполнена (поскольку другой метод может изменитьarr
так, чтобы он указывал на другой объект массива). 24.03.2013