0

我有一组由json2charp Web 实用程序从 REST 调用产生的 JSON 响应生成的 C# 类。我使用这些类将未来的 JSON 响应反序列化到这些类中。一切都很好。其中一个内部类具有一个数组属性。我尝试使用数组的Length属性在for 循环中使用该属性,但 Length 属性在当前范围内不可用。我猜这是因为它是一个内部类?

为了解决这个问题,我添加了一个名为CountBreeds的公共属性,它只返回数组 Length。这很好用。但是我想知道是否有一种方法可以获取内部类的数组属性的长度,而不必为了公开数组的长度属性而创建属性?如果没有,有没有办法在不向类添加 IEnumerable 支持的情况下迭代数组?

我知道我可以删除“内部”说明符,但如果可以的话,我想保留它。下面的代码片段:

// The internal class I want to iterate.
internal class Breeds
{

    [JsonProperty("breed")]
    public Breed[] Breed { get; set; }

    [JsonProperty("@animal")]
    public string Animal { get; set; }

    // This property was added to facilitate for loops-that iterate the
    //  entire array, since the Length propery of the array property
    //  can not be accessed.
    public int CountBreeds
    {
        get
        {
            return Breed.Length;
        }
    }
} // internal class Breeds

// Code that iterates the above class.

// >>>> This doesn't work since the Breeds Length property
//  is unavailable in this context.
//
// Add the breeds to the list we return.
for (int i = 0; i < jsonPF.Petfinder.Breeds.Length; i++)
    listRet.Add(jsonPF.Petfinder.Breeds.Breed[i].T);


// >>>> This *does* work because I added manually the CountBreeds
//  property (not auto-generated by json2csharp).
// Add the breeds to the list we return.
for (int i = 0; i < jsonPF.Petfinder.Breeds.CountBreeds; i++)
    listRet.Add(jsonPF.Petfinder.Breeds.Breed[i].T);
4

2 回答 2

3

您不是在询问数组的长度,而是询问 Breeds 类中不存在的 Length 属性。试试这个...

for (int i = 0; i < jsonPF.Petfinder.Breeds.Breed.Length; i++)
于 2013-04-14T22:59:11.403 回答
0

长度应该是可见的。Length 是 Array 上的公共属性,因此它与内部类无关。

于 2013-04-14T22:59:14.163 回答