Это код:
class Program
{
void Add2Array(object arr, object item)
{
if (arr.GetType() == typeof(string[]))
{
int iLen = (arr as Array).Length;
var c = Array.CreateInstance(typeof (String), 3);
Array v = Array.CreateInstance((arr as Array).GetValue(0).GetType(), iLen+1); // this works but when if arr is empty it wont work
Array.Copy(ar, v, iLen);
v.SetValue(item, iLen);
}
}
public string[] sarr = new string[1];
static void Main(string[] args)
{
Program p = new Program();
p.sarr[0] = "String Item";
p.Add2Array(p.sarr, "New string item");
}
}
Я хочу создать метод, который может принимать массивы любого типа и помещать в них новый элемент.
Приведенный выше код является моим решением (если вы знаете лучше, пожалуйста, поделитесь), и если параметр arr не имеет элемента, он не будет работать должным образом. Потому что, если я использую этот Array.CreateInstance(arr.GetType(),3)
, он создаст новый массив, подобный этому v.GetType() => string[2][]
, потому что arr является строковым массивом, и если я создаю с тем же типом, он возвращает двухмерный массив.
Как мне расширить массив (заданный в качестве параметра) и добавить в него новый элемент?