C# 将类实例作为值添加到字典
我有一个xml文件“Sample.xml” 对于上述文件,此查询工作正常 但是,如果文件中有多个同名元素,或者某个元素没有“start”和“end”属性,则在 执行查询 我对以下几行有意见C# 将类实例作为值添加到字典,c#,xml,C#,Xml,我有一个xml文件“Sample.xml” 对于上述文件,此查询工作正常 但是,如果文件中有多个同名元素,或者某个元素没有“start”和“end”属性,则在 执行查询 我对以下几行有意见 grp.Attributes("Start").ToList()[0].Value.ToString(), grp.Attributes("End").ToList()[0].Value.ToString() 请给我一个更好的方法 我需要在listView中填充口述的内容 S.no
grp.Attributes("Start").ToList()[0].Value.ToString(),
grp.Attributes("End").ToList()[0].Value.ToString()
请给我一个更好的方法
我需要在listView中填充口述的内容
S.no Child Siblings Additional Siblings Missing Siblings
1 FirstChild Test1,Test2 Add_Test_1,Add_Test_2 Miss_Test_1,Miss_Test_2
2 SecondChild Test3,Test4
3 ThirdChild Test5,Test6
现在我用for循环来实现这个
请给我一个更好的方法来实现这一点。鉴于您编写查询的方式,我不明白如果您有两个同名的
子元素,为什么会出现异常。如果有的话,它们的数据将被合并到字典中的一个键实例中。要修复当Start
属性不存在时收到的异常,只需执行测试?:
查看是否从属性查询返回了结果。也就是说,下面的代码应该适用于您,并附带免责声明,这并不意味着它是最佳实践。在很多方面,我自己也是LINQ新手
Dictionary<string, SampleClass> dict =
(from element in xDoc.Descendants("Child")
group element by element.Attribute("Name").Value
into kGrp
select kGrp)
.ToDictionary(grp => grp.Key,
grp => new SampleClass
{
Start = grp.Attributes("Start").Count() > 0
? grp.Attributes("Start")
.ToList()[0].Value.ToString()
: String.Empty
,End = grp.Attributes("End").Count() > 0
? grp.Attributes("End")
.ToList()[0].Value.ToString()
: String.Empty
,Siblings =
grp.Descendants("Sibling")
.Attributes("Name")
.Select(l_Temp => l_Temp.Value).ToList()
,AdditionalSiblings =
grp.Descendants("AdditionalSibling")
.Attributes("Name")
.Select(l_Temp => l_Temp.Value).ToList()
,MissingSiblings =
grp.Descendants("MissingSibling")
.Attributes("Name")
.Select(l_Temp => l_Temp.Value).ToList()
});
Dictionary dict=
(来自xDoc.substands(“子”)中的元素)
按元素对元素进行分组。属性(“名称”)。值
加入kGrp
选择kGrp)
.ToDictionary(grp=>grp.Key,
grp=>newsampleclass
{
Start=grp.Attributes(“Start”).Count()>0
?组属性(“开始”)
.ToList()[0].Value.ToString()
:String.Empty
,End=grp.Attributes(“End”).Count()>0
?组属性(“结束”)
.ToList()[0].Value.ToString()
:String.Empty
,兄弟姐妹=
grp.后代(“兄弟姐妹”)
.属性(“名称”)
.Select(l_Temp=>l_Temp.Value).ToList()
,额外的兄弟姐妹=
grp.后代(“额外兄弟姐妹”)
.属性(“名称”)
.Select(l_Temp=>l_Temp.Value).ToList()
,失去兄弟姐妹=
grp.后代(“缺失兄弟姐妹”)
.属性(“名称”)
.Select(l_Temp=>l_Temp.Value).ToList()
});
考虑到您编写查询的方式,如果有两个同名的子元素,我不明白为什么会出现异常。如果有的话,它们的数据将被合并到字典中的一个键实例中。要修复当Start
属性不存在时收到的异常,只需执行测试?:
查看是否从属性查询返回了结果。也就是说,下面的代码应该适用于您,并附带免责声明,这并不意味着它是最佳实践。在很多方面,我自己也是LINQ新手
Dictionary<string, SampleClass> dict =
(from element in xDoc.Descendants("Child")
group element by element.Attribute("Name").Value
into kGrp
select kGrp)
.ToDictionary(grp => grp.Key,
grp => new SampleClass
{
Start = grp.Attributes("Start").Count() > 0
? grp.Attributes("Start")
.ToList()[0].Value.ToString()
: String.Empty
,End = grp.Attributes("End").Count() > 0
? grp.Attributes("End")
.ToList()[0].Value.ToString()
: String.Empty
,Siblings =
grp.Descendants("Sibling")
.Attributes("Name")
.Select(l_Temp => l_Temp.Value).ToList()
,AdditionalSiblings =
grp.Descendants("AdditionalSibling")
.Attributes("Name")
.Select(l_Temp => l_Temp.Value).ToList()
,MissingSiblings =
grp.Descendants("MissingSibling")
.Attributes("Name")
.Select(l_Temp => l_Temp.Value).ToList()
});
Dictionary dict=
(来自xDoc.substands(“子”)中的元素)
按元素对元素进行分组。属性(“名称”)。值
加入kGrp
选择kGrp)
.ToDictionary(grp=>grp.Key,
grp=>newsampleclass
{
Start=grp.Attributes(“Start”).Count()>0
?组属性(“开始”)
.ToList()[0].Value.ToString()
:String.Empty
,End=grp.Attributes(“End”).Count()>0
?组属性(“结束”)
.ToList()[0].Value.ToString()
:String.Empty
,兄弟姐妹=
grp.后代(“兄弟姐妹”)
.属性(“名称”)
.Select(l_Temp=>l_Temp.Value).ToList()
,额外的兄弟姐妹=
grp.后代(“额外兄弟姐妹”)
.属性(“名称”)
.Select(l_Temp=>l_Temp.Value).ToList()
,失去兄弟姐妹=
grp.后代(“缺失兄弟姐妹”)
.属性(“名称”)
.Select(l_Temp=>l_Temp.Value).ToList()
});
不能使用词典,必须使用查找集合
字典要求每个键都有一个到唯一值的1-1映射
您要查找的是查找集合
有关更多信息,请参阅。您不能使用字典,必须使用查找集合
字典要求每个键都有一个到唯一值的1-1映射
您要查找的是查找集合
有关更多信息,请参见。您需要了解类和对象之间的区别。您正在尝试添加对象(类的实例)。您没有尝试添加类。您需要了解类和对象之间的区别。您正在尝试添加对象(类的实例)。您没有试图添加类。@Pramodh我建议您将问题拆分。你已经有了相当多的代码墙,我甚至没有注意到第二部分,直到我来查看你的评论。@Pramodh我建议把你的问题分开。你已经有了相当多的代码墙,我甚至没有注意到第二部分,直到我来检查你的评论。
grp.Attributes("Start").ToList()[0].Value.ToString(),
grp.Attributes("End").ToList()[0].Value.ToString()
S.no Child Siblings Additional Siblings Missing Siblings
1 FirstChild Test1,Test2 Add_Test_1,Add_Test_2 Miss_Test_1,Miss_Test_2
2 SecondChild Test3,Test4
3 ThirdChild Test5,Test6
Dictionary<string, SampleClass> dict =
(from element in xDoc.Descendants("Child")
group element by element.Attribute("Name").Value
into kGrp
select kGrp)
.ToDictionary(grp => grp.Key,
grp => new SampleClass
{
Start = grp.Attributes("Start").Count() > 0
? grp.Attributes("Start")
.ToList()[0].Value.ToString()
: String.Empty
,End = grp.Attributes("End").Count() > 0
? grp.Attributes("End")
.ToList()[0].Value.ToString()
: String.Empty
,Siblings =
grp.Descendants("Sibling")
.Attributes("Name")
.Select(l_Temp => l_Temp.Value).ToList()
,AdditionalSiblings =
grp.Descendants("AdditionalSibling")
.Attributes("Name")
.Select(l_Temp => l_Temp.Value).ToList()
,MissingSiblings =
grp.Descendants("MissingSibling")
.Attributes("Name")
.Select(l_Temp => l_Temp.Value).ToList()
});