WPF 프로젝트에서 트리 뷰의 경로 목록을 표시하기 위해 작업 중입니다. (: NetworkControl.AlternateIndexText.Value "예) 경로 ID를 가지고트리 : 문자열 및 구문 트리를 구문 분석하십시오.
생성자를 : 나는 propertyPaths 가 있습니다..
여기public MessageElement()
{
Children = new List<MessageElement>();
messageElements = new List<MessageElement>();
}
public MessageElement(int id, string name, List<MessageElement> children)
{
this.ID = id;
this.Name = name;
this.Children = children;
}
public MessageElement(int id, string path)
{
this.ID = id;
this.path = path;
}
내가 구문 분석을하고있는 중이 야 방법을 보여주는하고 나는 건물입니다
IEnumerable에서 propertyPath에서 아이 나는 BuildTree 방법에 통과
public List<MessageElement> BuildTree(IEnumerable<string> propertyPath)
{
return (
from path in propertyPath // Ex: NetworkControl.AlternateIndexText.Value"
let splitPath = path.Split('.')
group path by path.Split('.')[0] into pathElementGroup
select new MessageElement(ID, path)
{
// ID = Id,
Name = pathElementGroup.Key, //name of each tree node
Children = BuildTree( //create child from the propertyPath
from propertyPathElement in pathElementGroup
where propertyPathElement.Length > pathElementGroup.Key.Length + 1
select propertyPathElement.Substring(pathElementGroup.Key.Length + 1))
}).ToList();
}
채우기 데이터를 :.
public List<MessageElement> GetRequestTreeNodes()
{
messageElements.Add(new MessageElement(1, "NetworkControl.AlternateIndexText.Value"));
messageElements.Add(new MessageElement(2, "NetworkControl.AddressData.DestinationID"));
messageElements.Add(new MessageElement(2, "NetworkControl.AddressData.MessageOriginatorID.Value"));
}
여기에서 messageElements 목록에서 BuildTree 메서드로 전달할 목록을 준비 중입니다.
String[] propertyPath = messageElements.Select(I => Convert.ToString(I.path)).ToArray();
// int[] idList = messageElements.Select(I => (I.id)).ToArray();
List<MessageElement> nodeList = BuildTree(propertyPath);
return nodeList;
트리 노드 및 ID를 작성하는 데 사용중인 propertyPath 목록간에 어떻게 연관을 만들 수 있습니까? 예를 들어 MessageElement (1, "NetworkControl.AlternateIndexText.Value"));
(int id, string name, List children) 생성자가 있지만 BuildTree 메서드에서 ID를 전달하는 쉬운 방법을 찾을 수 없습니다. –
문제는 단순히 어디서나 ID 값을 설정하지 않는다는 것입니다. –
통찰력있는 피드백에 감사드립니다. 저는 C#을 처음 접했습니다. S의 의미는 내가 통과하는 문자열 경로의 변수 이름이고 g는 위치 0의 문자열 그룹입니다. 예, 여기 내 문제는 ID를 얻는 방법입니다. –