Получить значение свойства объекта в ArrayList


4

var FormFields = new List<CDatabaseField>(); CDatabaseField Db = new CDatabaseField(); ... FormFields.Add(Db);содержит объекты. Это не общий и тип safe.Th поэтому вам нужно для ( int i = 0 ; i < FormFields . Count ; i ++) { CDatabaseField Db = ( CDatabaseField ) FormFields [ i ]; Label1 . Текст = Db . FieldName ; // FieldName является обязательным свойством для извлечения } вашего объекта для доступа к его свойству. Вместо этого рассмотрите использование общих коллекций типа . Object

ArrayList

Затем вы увидите, что все свойства будут видны, потому что теперь компилятор знает тип ваших элементов и позволяет вам обращаться к членам вашего типа безопасным образом.


2 принят
+350

Наконец выяснил ответ. Я попытался отбросить объекты для каждого объекта, сохраненного в List <T>, и, наконец, мог бы получить требуемое поле каждого объекта:

foreach

1

Как уже указывалось и на основании этого :

Элемент возвращает a Object, поэтому вам может потребоваться отбросить возвращаемое значение к исходному типу, чтобы манипулировать им. Важно отметить, что ArrayListэто не строго типизированная коллекция. Для сильно типизированной альтернативы см foreach.

Однако в качестве другого варианта вы можете использовать castцикл, а не for. Когда ArrayListработает, он пытается castэлемент ArrayListк CDatabaseFieldи если элемент не конвертируется в CDatabaseFieldвы получаете InvalidCastException:

foreach (CDatabaseField item in FormFields)
{
    FieldName = item.FieldName;
}

Согласно foreach документации и синтаксису C # 6 приведенный выше код эквивалентен этому:

var enumerator = FormFields.GetEnumerator();
try
{
    while (enumerator.MoveNext())
    {
        CDatabaseField item = (CDatabaseField)enumerator.Current;
    }
}
finally
{
    var disposable = enumerator as IDisposable;
    disposable?.Dispose();
}
C #, ArrayList,

c#,arraylist,

2

Ответов: 3


4

var FormFields = new List<CDatabaseField>(); CDatabaseField Db = new CDatabaseField(); ... FormFields.Add(Db);содержит объекты. Это не общий и тип safe.Th поэтому вам нужно для ( int i = 0 ; i < FormFields . Count ; i ++) { CDatabaseField Db = ( CDatabaseField ) FormFields [ i ]; Label1 . Текст = Db . FieldName ; // FieldName является обязательным свойством для извлечения } вашего объекта для доступа к его свойству. Вместо этого рассмотрите использование общих коллекций типа . Object

ArrayList

Затем вы увидите, что все свойства будут видны, потому что теперь компилятор знает тип ваших элементов и позволяет вам обращаться к членам вашего типа безопасным образом.


2 принят
+350

Наконец выяснил ответ. Я попытался отбросить объекты для каждого объекта, сохраненного в List <T>, и, наконец, мог бы получить требуемое поле каждого объекта:

foreach

1

Как уже указывалось и на основании этого :

Элемент возвращает a Object, поэтому вам может потребоваться отбросить возвращаемое значение к исходному типу, чтобы манипулировать им. Важно отметить, что ArrayListэто не строго типизированная коллекция. Для сильно типизированной альтернативы см foreach.

Однако в качестве другого варианта вы можете использовать castцикл, а не for. Когда ArrayListработает, он пытается castэлемент ArrayListк CDatabaseFieldи если элемент не конвертируется в CDatabaseFieldвы получаете InvalidCastException:

foreach (CDatabaseField item in FormFields)
{
    FieldName = item.FieldName;
}

Согласно foreach документации и синтаксису C # 6 приведенный выше код эквивалентен этому:

var enumerator = FormFields.GetEnumerator();
try
{
    while (enumerator.MoveNext())
    {
        CDatabaseField item = (CDatabaseField)enumerator.Current;
    }
}
finally
{
    var disposable = enumerator as IDisposable;
    disposable?.Dispose();
}
C #, ArrayList,
Похожие вопросы