我在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;可以找到(你是否错过了使用指令或 装配参考?)
答案 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;
}