Если вы хотите вернуть @from
как object[]
- , если это уже object[]
- тогда самый простой способ это просто:
private object[] GetArray(object @from)
{
return @from as object[] ?? new object[] { @from };
}
Вышесказанное может показаться немного запутанным. Вот как это работает:
- Если
@from
это object[]
для начала, он просто возвращает это (набрано как таковое).
- В противном случае выражение
@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 };
}