测试一个封装字段,出现索引超出范围
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
this.Add();
Response.Write (this.alFieldItems.Count);
}
protected System.Collections.ArrayList alFieldItems = new System.Collections.ArrayList(10); // 10对值
public void AddFieldItem(string _fieldName,object _fieldValue) // object,因为值类型不确定!
{
for(int i=0;i <alFieldItems.Count;i++)
{
if(((DbKeyItem)this.alFieldItems[i]).fieldName == _fieldName)
{
throw new ArgumentException( "The field name has existed! ");
}
this.alFieldItems.Add(new DbKeyItem(_fieldName,_fieldValue));
Response.Write (this.alFieldItems.Count);
}
}
public void Add()
{
this.AddFieldItem( "userName ", "xlingfeng ");
}
public class DbKeyItem
{
/// <summary>
/// 字段名称
/// </summary>
public string fieldName;
/// <summary>
/// 字段值
/// </summary>
public string fieldValue;
/// <summary>
/// 类的构造函数
/// <para name= "_fieldName "> 字段名称。 </para>
/// <para name= "_fieldValue "> 字段值。 </para>
/// </summary>
public DbKeyItem(string _fieldName,object _fieldValue)
{
this.fieldName = _fieldName;
this.fieldValue = _fieldValue.ToString();
}
}
----------预期实现效果
将 字段和字段值放入 数组中待以后处理
为何 Count的值认为 0 呢??
------解决方案--------------------你把this.alFieldItems.Add(new DbKeyItem(_fieldName,_fieldValue));放在了for循环里当然不会添加值进去,因为永远都进不去这个循环
------解决方案-------------------- public void AddFieldItem(string _fieldName,object _fieldValue) // object,因为值类型不确定!
{
bool isFieldExisted = false;
for(int i=0;i <alFieldItems.Count;i++)
{
if(((DbKeyItem)this.alFieldItems[i]).fieldName == _fieldName)
{
throw new ArgumentException( "The field name has existed! ");
isFieldExisted = true;
break;
}
}
if(isFieldExisted == false)
{
this.alFieldItems.Add(new DbKeyItem(_fieldName,_fieldValue));
}
Response.Write (this.alFieldItems.Count);
}