下面的代码是我写的。
if (string.IsNullOrEmpty(newValueNames) == false)
{
string[] temp1 = newValueNames.Split(",\r\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
ArrayList temp = new ArrayList();
for (int i = 0; i < temp1.Length; i++)
{
if (temp.Contains(temp1[i])==false)
{
temp.Add(temp1[i]);
}
}
foreach (string item in temp.ToArray())
{
if (item.IsNullOrEmpty(true) == false)
{
foreach (AttributeValue value in attributeValues.ToList())
{
if (item.Trim() == value.ValueName.Trim())
{
//int i=UpdateAttributeValuesStatus(attributeID, item.Trim(), value.ValueID.ToString());
attributeValues.Remove(value);
attributeValues.Add(new AttributeValue() { ValueName = item.Trim(), StatusID = "A", ValueID = value.ValueID, AttributeID = Int32.Parse(attributeID) });
temp.reomve(item);
break;
}
}
}
foreach(string item in temp)
{
attributeValues.Add(new AttributeValue() { ValueName = item.Value, StatusID = "A" });
}
}
if (newValueNames.IsNullOrEmpty(true) == false)
{
string[] temp1 = newValueNames.Split(",\r\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
Dictionary<string, string> temp = new Dictionary<string, string>();
// Remove duplicated names in the new value
for (int i = 0; i < temp1.Length; i++)
{
if (temp1[i].IsNullOrEmpty(true) == false && temp.ContainsKey(temp1[i].Trim().ToUpper()) == false)
{
temp.Add(temp1[i].Trim().ToUpper(), temp1[i].Trim());
}
}
foreach (KeyValuePair<string, string> item in temp.ToArray())
{
foreach (AttributeValue value in attributeValues.ToList())
{
if (string.Compare(item.Key, value.ValueName, StringComparison.InvariantCultureIgnoreCase) == 0)
{
value.StatusID = "A";
temp.Remove(item.Key);
break;
}
}
}
foreach (KeyValuePair<string, string> item in temp)
{
attributeValues.Add(new AttributeValue() { ValueName = item.Value, StatusID = "A" });
}
}
首先考虑代码的性能最好不要使用Array和ArrayList数组。要使用泛型如List<string> temp=new List<string>();
再者在比较重复值时使用Dictionary<string, string>去判断输入值大小写不一样时也要按重复值进行处理。
判断字符类型为不为空时使用temp1[i].IsNullOrEmpty(true)去判断比用string.Empty要好用。
在我写的代码中有个bug:
attributeValues.Remove(value);
attributeValues.Add(new AttributeValue() { ValueName = item.Trim(), StatusID = "A", ValueID = value.ValueID, AttributeID = Int32.Parse(attributeID) });
因为数组中存在id是固定的,不能把原来的删了再添加,直接改原来的数据就行了。如:
value.StatusID = "A";
比较两个字符串是否相等时不要用:item.Trim() == value.ValueName.Trim()
而要使用:
string.Compare(item.Key, value.ValueName, StringComparison.InvariantCultureIgnoreCase) == 0
也就是string.Compare()方法。
当对泛型的数据进行遍历时如果是如下代码:则只能遍历不能对数据进行增删改操作。
foreach(AttributeValue value in attributeValues)
{}
如果要进行增删改操作则需要把泛型数据转化为数组进行操作:
foreach(AttributeValue value in attributeValues.ToList())
{}
很感谢头能一行一行仔细看代码并进行修改。让我学习到不少的东西。