Страницы

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

воскресенье, 15 декабря 2019 г.

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

#c_sharp #c_sharp_70


Существует ли какой-либо способ расширить встроенный прямоугольный массив в 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]);
    } 
}

    


Ответы

Ответ 1



Использовать методы расширения? 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); } }

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

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