Ken*_*man 1 c# arrays reflection resize
我的用户传给我一些类型的数组,比如int []或string [].我可以通过GetElementType轻松查询元素的类型,我可以通过GetRank,GetLength等查看数组传递给我的时间.
数组在params列表中传递,因此可视化代码如下:
public void Resizer(params object[] objs)
{
foreach (object o in objs)
Array.Resize(ref o, 3);
}
Run Code Online (Sandbox Code Playgroud)
我想要做的是与可用的Get方法相反并且确实有效:我想调整传递给我的数组的大小,将长度设置为其他长度(在这个愚蠢的例子中就像3).
我这样做是因为在我的设置中,数组将包含从一组云计算服务器接收的数据,我们无法知道有多少人会提前响应,因此无法预先分配数组以获得正确的长度.理想情况下,实际上,我的用户传入一个长度为0的数组,然后传回一个长度为n的数组,表示我从查询服务器获得了n个回复.
我无法使用Array.Resize(ref T,int)执行此操作,因为我在编译时不知道T.
有没有办法解决这个问题?
这应该工作:
static void Resize(ref Array array, int newSize) {
Type elementType = array.GetType().GetElementType();
Array newArray = Array.CreateInstance(elementType, newSize);
Array.Copy(array, newArray, Math.Min(array.Length, newArray.Length));
array = newArray;
}
Run Code Online (Sandbox Code Playgroud)