这与上一个问题有关,但似乎不同,可以单独发布:
DomAttributeIds
我有从用户输入(和)存储在字符串数组中的设置IntlAttributeIds
。我正在尝试有条件地构建一个值数组来执行一些代码。条件是:
- 如果
DomAttributesSettings
存在,则创建一个值数组并将它们传递给AddAttributeEdit()
方法。 - 如果
IntlAttributesSettings
存在,则创建这些设置的数组,并将它们与条件一中的设置明显结合(无重复),并将该数组传递给代码的其余部分,最终将每个数组元素传递给AddAttributeEdit()
方法。
除了“无重复”部分之外,下面的代码似乎有效。我认为使用 Linq 的 Union 和/或 Distinct 方法可以做到这一点,但我一定做错了什么。我的代码抛出以下异常:
找到具有相同 ID 'trAttribute_493' 的多个控件。FindControl 要求控件具有唯一的 ID。
我知道这是因为该 id 存在于两种设置中。最后的AddAttributeEdit()
方法包含基于传递给它的值构建带有 Ids 的表格和单元格的代码。为了获得两个数组的不同联合,我做错了什么?
这是代码:
private void LoadAttributes()
{
if (!string.IsNullOrEmpty(DomAttributesSetting))
{
string[] attributeIds;
if (!string.IsNullOrEmpty(IntlAttributesSetting))
{
string[] domattributeIds = DomAttributesSetting.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
string[] intlattributeIds = IntlAttributesSetting.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
IEnumerable<string> atrributeIdList = domattributeIds.Union(intlattributeIds).Distinct();
attributeIds = atrributeIdList.ToArray();
}
else
{
attributeIds = DomAttributesSetting.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
}
foreach (string attributeId in attributeIds)
{
int attrId = -1;
if (int.TryParse(attributeId, out attrId) && attrId != -1)
{
Arena.Core.Attribute attribute = new Arena.Core.Attribute(attrId);
PersonAttribute personAttribute = (PersonAttribute)person.Attributes.FindByID(attribute.AttributeId);
if (personAttribute == null)
personAttribute = new PersonAttribute(person.PersonID, attrId);
AddAttributeEdit(attribute, personAttribute, true);
}
}
}
}...