获取ArrayList中对象的属性值

时间:2014-10-28 15:44:39

标签: 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.PageNo = PageNo; //PageNo, Description, ButtonCommand are also fetched like FieldName
Db.Description = Description;
Db.ButtonCommand = ButtonCommand;
FormFields.Add(Db);

现在当我想只检查FieldName中每个对象的ArrayList时(假设ArrayList中有很多对象)。我怎么能这样做?

我试过了:

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

但是这会产生错误(在IDE中)。我是C#编程的新手,所以有人可以帮我解决这个问题吗?

  

错误:错误21&#39;对象&#39;不包含&#39; FieldName&#39;的定义   并且没有扩展方法&#39; FieldName&#39;接受第一个类型的参数   &#39;对象&#39;可以找到(你是否错过了使用指令或   装配参考?)

3 个答案:

答案 0 :(得分:5)

ArrayList拥有对象。它不是通用的,也不是类型安全的。这就是为什么你需要转换对象来访问它的属性。相反,请考虑使用List<T>等通用集合。

var FormFields = new List<CDatabaseField>();
CDatabaseField Db = new CDatabaseField();
...
FormFields.Add(Db);

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

答案 1 :(得分:4)

终于找到了答案。 我试图为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
}

答案 2 :(得分:1)

正如已经指出并基于this

  

项目返回var sass = { fileNames:{ public:['styles', 'print'], private:['custom', 'screen'], }, filePaths:{ // PUBLIC WEBSITE STYLESHEETS public:{ entry: './entry-path', }, // ADMIN PRIVATE STYLESHEETS private:{ entry: './entry', }, }, fileType: ".scss", // Can be changed to .sass or .scss depending on format used, updateAllFileNames: function(){ // set values as you want this.fileNames.all = Array.prototype.concat.apply( this.fileNames.public, this.fileNames.private ) // delete the function so it will not be usable anymore delete this.updateAllFileNames // return self in order to assign the sass object return this; } }.updateAllFileNames() ,因此您可能需要转换返回的值   到原始类型,以操纵它。重要的是要   请注意Object不是强类型集合。为一个   强类型替代方案,请参阅List<T>

但是,作为另一种选择,您可以使用ArrayList循环代替foreach。当for运行时,会尝试将foreach的{​​{1}}元素设为cast,如果某个元素无法转换为ArrayList,您将获得CDatabaseField }}:

CDatabaseField

根据InvalidCastException documentation和C#6语法,上面的代码与此相同:

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