C# 获取ArrayList中对象属性的值

C# 获取ArrayList中对象属性的值,c#,.net,arraylist,C#,.net,Arraylist,我已经用C#for windows窗体应用程序初始化了一个ArrayList。我正在添加新对象,每个对象在ArrayList中的属性很少,例如: ArrayList FormFields = new ArrayList(); CDatabaseField Db = new CDatabaseField(); Db.FieldName = FieldName; //FieldName is the input value fetched from the Windows Form Db.Page

我已经用C#for windows窗体应用程序初始化了一个
ArrayList
。我正在添加新对象,每个对象在
ArrayList
中的属性很少,例如:

ArrayList FormFields = new ArrayList();

CDatabaseField Db = new CDatabaseField();
Db.FieldName = FieldName; //FieldName is the input value fetched from the Windows Form
Db.PageNo = PageNo; //PageNo, Description, ButtonCommand are also fetched like FieldName
Db.Description = Description;
Db.ButtonCommand = ButtonCommand;
FormFields.Add(Db);
现在,当我只想检查
ArrayList
中每个对象的
FieldName
时(假设
ArrayList
中有许多对象)。我该怎么做

我试过:

for(int i=0; i<FormFields.Count; i++) 
{
    FieldName = FormFields[i].FieldName;
}

<代码> >(int i=0;i <代码> ARARYLIST/<代码>保存对象。它不是泛型的和类型安全的。这就是为什么您需要抛出您的对象来访问它的属性。而应考虑使用诸如“代码>列表”的泛型集合。

var FormFields=new List();
CDATA BaseField Db=新的CDATA BaseField();
...
FormFields.Add(Db);

然后您可以看到所有属性都是可见的,因为现在编译器知道元素的类型,并允许您以类型安全的方式访问类型的成员。

最终找到了答案。 我尝试为保存在arraylist中的每个对象强制转换对象,最后可以获取每个对象的必填字段:

for (int i = 0; i < FormFields.Count; i++)
{
     CDatabaseField Db = (CDatabaseField)FormFields[i];
     Label1.Text = Db.FieldName; //FieldName is the required property to fetch
}
for(int i=0;i
如前所述,基于:

该项返回一个
对象
,因此您可能需要强制转换返回的值 对原始类型进行修改,以便对其进行操作 请注意,
ArrayList
不是强类型集合 强类型替换,请参阅

但是,作为另一个选项,您可以使用
foreach
循环而不是
for
。当
foreach
运行时,它会尝试
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();
}

你能用一个CDATA基本字段列表来代替数组列表吗?
Recipe
OP的
OP
最佳选择是创建一个CDATA基本字段列表,正如
Selman22
所指出的那样。
list
Daniel,实际上我正在开发一个旧软件,它实现了一个名为FormFields的数组列表来存储CDa列表tabaseField,它在软件中的数千个位置被使用。要将arraylist更改为列表,我需要在很多位置更改它,这目前是不可行的。您能给我建议一种从arraylist中保存的对象获取特定字段名的方法吗?我现在尝试了这种方法,但“var”在visua中生成了一个错误l basic:错误1找不到类型或命名空间名称“var”(是否缺少using指令或程序集引用?)Selman22,实际上我正在开发一个旧软件,它实现了名为FormFields的arraylist来存储CDATA BaseField的列表,该列表在软件中有上千个位置使用。要将arraylist更改为列表,我需要在很多位置更改该列表,这在目前是不可行的。你能给我建议一种获取特定fie的方法吗arraylist中保存的对象的ldname??
var enumerator = FormFields.GetEnumerator();
try
{
    while (enumerator.MoveNext())
    {
        CDatabaseField item = (CDatabaseField)enumerator.Current;
    }
}
finally
{
    var disposable = enumerator as IDisposable;
    disposable?.Dispose();
}