C #: возвращает массив из объекта - PullRequest
0 голосов
/ 03 июня 2010

Есть следующая задача: Мне нужно проверить, является ли входной параметр (объект) массивом, а затем вернуть массив входных элементов. Например, у меня есть входной массив, как это:

int [] array = {1,2,3,4};

И метод

  private object[] GetArray(object @from)
  {
  }

Итак, мне нужно проверить в этом методе, что входной переменной является массив, а после вернуть этот массив. Для проверки я использую

if(@from.GetType().IsArray)

А как создать массив из объекта ??? Является ли это возможным ? Благодаря.

Ответы [ 3 ]

3 голосов
/ 03 июня 2010

Если вы хотите вернуть @from как object[] - , если это уже object[] - тогда самый простой способ это просто:

private object[] GetArray(object @from)
{
    return @from as object[] ?? new object[] { @from };
}

Вышесказанное может показаться немного запутанным. Вот как это работает:

  1. Если @from это object[] для начала, он просто возвращает это (набрано как таковое).
  2. В противном случае выражение @from as object[] оценивается как null. В этом случае оператор объединения нулей (??) вычисляет следующее выражение: new object[] { @from }.

В результате этот метод возвращает либо уже существующий массив object[], либо массив длины 1, содержащий @from.

С другой стороны, если вы хотите заполнить и object[] из содержимого из @from, я бы сделал это:

private object[] GetArray(object @from)
{
    var objects = @from as IEnumerable;
    if (objects != null)
        return objects.Cast<object>().ToArray();

    return new object[] { @from };
}

Как указал LukeH, вы также можете убедиться, что @from не является string, если вы не хотите, чтобы GetArray(string) возвращал object[], содержащий char элементы:

private object[] GetArray(object @from)
{
    var str = @from as string;
    if (str != null)
        return new object[] { str };

    var objects = @from as IEnumerable;
    if (objects != null)
        return objects.Cast<object>().ToArray();

    return new object[] { @from };
}
0 голосов
/ 03 июня 2010

Не зная, что это за объект, создание массива - очень неоднозначная задача. Какие значения вы хотите в массиве? У этих значений есть какое-то более глубокое значение. Это действительно то, что объект должен знать о себе, и вам не обязательно знать подробности. Например, Collection имеет метод CopyTo, который выполняет эту задачу.

0 голосов
/ 03 июня 2010

вы можете использовать arraylist для этой задачи ... Мы можем добавить любой объект в arraylist и вы можете вернуть его затем

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...