У меня есть набор классов C#, сгенерированных веб-утилитой json2charp из ответа JSON, полученного в результате вызова REST. Я использую классы для десериализации будущих ответов JSON в эти классы. Все отлично работает. Один из внутренних классов имеет свойство, которое является массивом. Я попытался использовать это свойство в цикле for-loop, используя свойство массива Length, но свойство Length недоступно в текущей области. Я предполагаю, что это потому, что это внутренний класс?
Чтобы обойти эту проблему, я добавил общедоступное свойство с именем CountBreeds, которое просто возвращает длину массива. Это прекрасно работает. Но мне интересно, есть ли способ получить длину свойства массива внутреннего класса без необходимости создавать свойства только для того, чтобы выставить свойство длины массива? Если нет, есть ли способ перебрать массив без добавления поддержки 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);
Length
не должен быть виден. Кроме того, массивы реализуютIEnumerable
. - person Simon Whitehead   schedule 15.04.2013Breeds
и содержащий массив с именемBreed
? Мне одному это кажется странным? Какую логику вы использовали при разработке такого именования? - person walther   schedule 15.04.2013