C# 获取ArrayList中对象属性的值
我已经用C#for windows窗体应用程序初始化了一个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
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();
}