(Это сообщение было отредактировано с большим количеством информации, потому что она должна была упрощена)заполнение массива в объекте в C#
Код ниже результатов в System.IndexOutOfRangeException: Индекс находился вне границ массива
, и я пытаюсь понять, почему это происходит.
Образец немного упрощен.
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.18020")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://iptc.org/std/SportsML/2008-04-01/")]
[System.Xml.Serialization.XmlRootAttribute("team-metadata", Namespace = "http://iptc.org/std/SportsML/2008-04-01/", IsNullable = false)]
public partial class teammetadata
{
private name[] nameField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("name")]
public name[] name
{
get
{
return this.nameField;
}
set
{
this.nameField = value;
}
}
}
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.18020")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://iptc.org/std/SportsML/2008-04-01/")]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "http://iptc.org/std/SportsML/2008-04-01/", IsNullable = false)]
public partial class name
{
private string fullField;
[System.Xml.Serialization.XmlAttributeAttribute()]
public string full
{
get
{
return this.fullField;
}
set
{
this.fullField = value;
}
}
}
пытается сделать это:
// Creating team meta data object
var teamMetaData = new teammetadata[1];
// creating home team meta data
var homeTeamMetaData = new teammetadata();
// Creating a new home team name
var homeTeamName = new name[0];
// Creating the team name
var teamName = new name { full = "Team name" };
homeTeamName[0] = teamName; // Ok
homeTeamMetaData.name = new name[] { teamName }; // Causes exception
homeTeamMetaData.name = homeTeamName; // Causes exception
Я попробовал несколько различных подходов, но все заканчивается тем, что исключение.
Что я неправильно понял?
Ответ:
Как Патрик Хофман правильно указал, я садился homeTeamName пустого массива с размером равного нуля. В массивах вы установите начальный размер в 1, но при добавлении элементов запуска в положении 0.
Только в случае других спотыкается это так же, здесь очень простой пример, чтобы сказать, как массивы работают:
using System;
public class Program
{
public static void Main()
{
// Creating an array of strings which can hold up to two string objects
var arrayString = new string[2];
// Creating the first string object
var stringItem1 = "Hello";
// Adding the first string object to the array
arrayString[0] = stringItem1;
// Creating the second string object
var stringItem2 = "World!";
// Adding the second string object to the array
arrayString[1] = stringItem2;
// Write the output...
Console.WriteLine(arrayString[0] + " " + arrayString[1]);
}
}
Этот пример можно найти здесь:
https://dotnetfiddle.net/JpJyDg
Опять же, спасибо за очень ценную обратную связь и помощь со стороны сообщества переполнением стека.
Тронд
Вы можете показать определение класса 'bar'? – fubo
Для меня этот код компилируется и работает просто отлично. Очевидно, вы слишком упростили свой код (за исключением того, что 'codeFoo [0]' не содержит какого-либо члена с именем 'bar'). – HimBromBeere
Почему бы не использовать 'public bar [] barfield {get; set}'? – Aht