구성 파일에서 구성 섹션을 읽었습니다. xml은 다음과 같습니다.C# ConfigurationSection에서 중복 이름을 반환하지 않습니다.
<GroupBySection>
<Groups>
<Group name="Source" product="Product One">
<Items>
<Item name="2003" type="radio" />
<Item name="2007" type="radio" />
<Item name="2010" type="radio" />
<Item name="2013" type="radio" />
<Item name="o365" type="radio" />
</Items>
</Group>
<Group name="Target" product="Product One">
<Items>
<Item name="2003" type="radio" />
<Item name="2007" type="radio" />
<Item name="2010" type="radio" />
<Item name="2013" type="radio" />
<Item name="o365" type="radio" />
</Items>
</Group>
<Group name="Source" product="Product Two">
<Items>
<Item name="2003" type="radio" />
<Item name="2007" type="radio" />
<Item name="2010" type="radio" />
<Item name="2013" type="radio" />
<Item name="o365" type="radio" />
</Items>
</Group>
</Groups>
</GroupBySection>
이 구성 섹션을 호출하고 계산을 수행하면 첫 번째 제품 원 결과 만 표시됩니다. 제품 2가 표시되지 않습니다. 이름이 "소스"이기도합니다. 이름이 같은지 상관없이 모두 표시하도록합니다. 즉, 내가 원한다고해도 이미 왔던 동일한 이름의 어떤 것도 반환하지 않을 것입니다. 누군가 ive가 잘못한 것을 지적 할 수 있습니까?
코드 감사합니다 :)
public class GroupByConfiguration : ConfigurationSection
{
[ConfigurationProperty("Groups")]
public GroupByElementCollection Groups
{
get { return ((GroupByElementCollection)(base["Groups"])); }
set { base["Groups"] = value; }
}
}
요소 섹션
public class GroupByElement : ConfigurationElement
{
// Group Attributes
[ConfigurationProperty("name", IsRequired = true)]
public string Name
{
get { return (string)base["name"]; }
}
[ConfigurationProperty("product", IsRequired = true)]
public string Product
{
get { return (string)base["product"]; }
}
[ConfigurationProperty("Items")]
public ItemElementCollection Items
{
get { return ((ItemElementCollection)(base["Items"])); }
set { base["Items"] = value; }
}
}
요소 컬렉션
[ConfigurationCollection(typeof(GroupByElement))]
public class GroupByElementCollection : ConfigurationElementCollection
{
internal const string PropertyName = "Group";
public override ConfigurationElementCollectionType CollectionType
{
get
{
return ConfigurationElementCollectionType.BasicMapAlternate;
}
}
protected override string ElementName
{
get
{
return PropertyName;
}
}
protected override bool IsElementName(string elementName)
{
return elementName.Equals(PropertyName, StringComparison.InvariantCultureIgnoreCase);
}
public override bool IsReadOnly()
{
return false;
}
protected override ConfigurationElement CreateNewElement()
{
return new GroupByElement();
}
protected override object GetElementKey(ConfigurationElement element)
{
return ((GroupByElement)(element)).Name;
}
public GroupByElement this[int idx]
{
get { return (GroupByElement)BaseGet(idx); }
}
}
나는 확신 바보 뭔가없는 ConfigurationSection
이하 전 사전에!
Ahh는 나에게 멍청한 프로그래머이다. 나는 그 일을하고 있다는 것을 결코 알지 못했다. (튜토리얼 사용). 오버라이드 동작에 대해 너무 걱정하지 않아 GUID를 반환하는 것이 좋습니다. 방금 테스트 한 결과 예상대로 작동합니다! 정말 고맙습니다! – jAC
random guess ftw. 또한, 그 클래스들에 관한 문서를 읽는 동안'ConfigurationElementCollectionType.BasicMapAlternate' 열거 형 값도 오버라이드 동작에 묶여 있다고 언급 한 것으로 생각됩니다. 무시할 수없는 값으로 변경하는 것이 좋습니다. 행운을 빕니다! – welegan
할 것입니다! 정말 고맙습니다! – jAC