Преобразование объекта в один элемент массива объекта (С#)
Некоторые функции принимают только массивы как аргументы, но вы хотите назначить им один объект. Например, чтобы назначить столбец первичного ключа для DataTable
, я делаю это:
DataColumn[] time = new DataColumn[1];
time[0] = timeslots.Columns["time"];
timeslots.PrimaryKey = time;
Это кажется громоздким, поэтому в основном мне нужно преобразовать DataColumn
в массив DataColumn[1]
. Есть ли более простой способ сделать это?
Ответы
Ответ 1
Вы можете написать его с помощью синтаксиса инициализатора массива:
timeslots.PrimaryKey = new[] { timeslots.Columns["time"] }
Это использует вывод типа для вывода типа массива и создания массива любых временных интервалов типа. Возвращаются колонки [ "time" ].
Если вы предпочитаете, чтобы массив был другого типа (например, супертип), вы также можете сделать это явно
timeslots.PrimaryKey = new DataColumn[] { timeslots.Columns["time"] }
Ответ 2
Вы также можете записать в одной строке с инициализатором массива:
timeslots.PrimaryKey = new DataColumn[] { timeslots.Columns["time"] };
Проверьте это: Все возможные синтаксисы инициализации массива С#
Ответ 3
timeslots.PrimaryKey = new DataColumn[] { timeslots.Columns["time"] };
Ответ 4
Опираясь на ответы выше, я создал этот метод расширения, который очень полезен и экономит мне много печатания.
/// <summary>
/// Convert the provided object into an array
/// with the object as its single item.
/// </summary>
/// <typeparam name="T">The type of the object that will
/// be provided and contained in the returned array.</typeparam>
/// <param name="withSingleItem">The item which will be
/// contained in the return array as its single item.</param>
/// <returns>An array with <paramref name="withSingleItem"/>
/// as its single item.</returns>
public static T[] ToArray<T>(this T withSingleItem) => new[] { withSingleItem };