我对 C# 还是个新手,我一直在努力解决数组的各种问题。我有一组元数据对象(名称值对),我想知道如何只创建我真正需要的“InputProperty”对象的数量。在此循环中,我任意将元素数设置为 20,并尝试在条目变为 null 时退出,但接收端的 Web 服务不喜欢传递给它的任何 null 元素:
private Update BuildMetaData(MetaData[] nvPairs)
{
Update update = new Update();
InputProperty[] ip = new InputProperty[20]; // how to make this "dynamic"
int i;
for (i = 0; i < nvPairs.Length; i++)
{
if (nvPairs[i] == null) break;
ip[i] = new InputProperty();
ip[i].Name = "udf:" + nvPairs[i].Name;
ip[i].Val = nvPairs[i].Value;
}
update.Items = ip;
return update;
}
总而言之,假设我在上面的输入数组中只有 3 个名称值对?与其为名为 ip 的数组分配 20 个元素,不如如何编写此代码以使 ip 仅与它需要的一样大。更新对象通过另一个网络服务传递,因此序列化很重要(即我不能使用 namevaluecollection 等)。
附注是通过“添加评论”工具跟进已发布问题的唯一方法吗?
最佳答案
InputProperty[] ip = new InputProperty[nvPairs.Length];
或者,您可以使用这样的列表:
List<InputProperty> list = new List<InputProperty>();
InputProperty ip = new (..);
list.Add(ip);
update.items = list.ToArray();
我想指出的另一件事是,在 C# 中,您可以在循环内的 for 循环中使用 delcare int 变量:
for(int i = 0; i<nvPairs.Length;i++
{
.
.
}
只是因为我有心情,这里有一个更简洁的方法来执行此方法 IMO:
private Update BuildMetaData(MetaData[] nvPairs)
{
Update update = new Update();
var ip = new List<InputProperty>();
foreach(var nvPair in nvPairs)
{
if (nvPair == null) break;
var inputProp = new InputProperty
{
Name = "udf:" + nvPair.Name,
Val = nvPair.Value
};
ip.Add(inputProp);
}
update.Items = ip.ToArray();
return update;
}
关于c# - 如何在c#中动态设置数组长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/683073/