1

我是 C# 新手。这是我开始工作的硬编码:

InputProperty grantNumber = new InputProperty();
grantNumber.Name = "udf:Grant Number";
grantNumber.Val = "571-1238";

Update update = new Update();
update.Items = new InputProperty[] { grantNumber };

现在我想推广它以支持 Update 对象中无限数量的项目,我想出了这个但它无法编译:

Update update = BuildMetaData(nvc);  //call function to build Update object

以及这里的函数本身:

private Update BuildMetaData(NameValueCollection nvPairs)
{
    Update update = new Update();
    InputProperty[] metaData;       // declare array of InputProperty objects
    int i = 0;
    foreach (string key in nvPairs.Keys)
    {
        metaData[i] = new InputProperty();      // compiler complains on this line
        metaData[i].Name = "udf:" + key;
        foreach (string value in nvPairs.GetValues(key))
            metaData[i].Val = value;
    }
    update.Items = metaData;
    return update;      // return the Update object
}
4

4 回答 4

3

由于您的 Items 集合的大小可能会有所不同,因此您应该使用集合类型,例如List<T>Dictionary<K,V>代替数组。

于 2009-03-19T18:26:18.860 回答
2

对于当前的编译器错误,需要初始化 metaData 数组,如:

InputProperty[] metaData = new InputProperty[](nvPairs.Count);

使用 linq 你可以:

private Update BuildMetaData(NameValueCollection nvPairs)
{
    Update update = new Update();
    update.Items = nvPairs.Keys
        .Select(k=> new InputProperty
                    {
                       Name = "udf:" + k,
                       Val = nvPairs[k] // or Values = nvPairs.GetValues(k)
                    }
         )
        .ToArray();
    return update;      // return the Update object
}
于 2009-03-19T18:29:24.437 回答
1

如果我没记错的话,你的 InputProperty 数组永远不会被初始化。如果将第 2 行更改为:

InputProperty[] metaData = new InputProperty[nvPairs.Count];

那应该解决它。

于 2009-03-19T18:29:54.670 回答
0

当你声明你的数组 InputProperty[] 元数据时,你没有初始化它。因此,当您尝试访问成员时,它根本不存在,这就是您遇到错误的原因。

As Joel recommended, I'd advise you to look at the collection types provided in System.Collections.Generic for something suitable.

于 2009-03-19T18:31:42.310 回答