Страницы

Поиск по вопросам

суббота, 27 октября 2018 г.

Способ расширения/наследование/декорирования 2D массива

Существует ли какой-либо способ расширить встроенный прямоугольный массив в c#? Например:
public class Array2D:???? { private T[,] _data;
public Array2D(T[,] vals) { _data = vals; }
public IEnumerable Row( int iRow) { return _data.Cast().Select((t, j) => _data[iRow, j]); } }


Ответ

Использовать методы расширения?
public static class TwoDimensionalArrayExtensions { public static IEnumerable Row(this T[,] array, int iRow) { if (array == null) { throw new ArgumentNullException(nameof(array)); } if (iRow < array.GetLowerBound(0) && iRow > array.GetUpperBound(0)) { throw new ArgumentOutOfRangeException(nameof(iRow)); }
for (int columnIndex = array.GetLowerBound(1); columnIndex <= array.GetUpperBound(1); columnIndex++) { yield return array[iRow, columnIndex]; } } }
Использование:
static void Main(string[] args) { var array = new int[2, 2] { { 1, 2 }, { 3, 4 } }; foreach (var value in array.Row(0)) { Console.WriteLine(value); } }

Комментариев нет:

Отправить комментарий