C# OpenXML:使用Element.Val和Element{Val=";Val";}的区别

C# OpenXML:使用Element.Val和Element{Val=";Val";}的区别,c#,.net,openxml,openxml-sdk,C#,.net,Openxml,Openxml Sdk,基本上,这个 pRp.GetFirstChild<ParagraphStyleId>().Val = "Heading1"; pRp.GetFirstChild().Val=“Heading1”; 还有这个 pRp.GetFirstChild<ParagraphStyleId>().Remove(); pRp.InsertAt(new ParagraphStyleId() { Val = "Heading1" }, 0); p

基本上,这个

pRp.GetFirstChild<ParagraphStyleId>().Val = "Heading1";
pRp.GetFirstChild().Val=“Heading1”;
还有这个

pRp.GetFirstChild<ParagraphStyleId>().Remove();
                    pRp.InsertAt(new ParagraphStyleId() { Val = "Heading1" }, 0);
pRp.GetFirstChild().Remove();
pRp.InsertAt(新的ParagraphStyleId(){Val=“Heading1”},0);
给了我不同的结果。后者的工作原理与预期一致。第一个没有。为什么?

我试图做的是将文档的第一段设置为Heading1样式,无论是否存在ParagraphStyleId,或者是否设置了其他样式

还有,有没有更好的方法


谢谢

要了解完整的场景,您需要了解引用类型和值类型之间的差异。只有C#7.0及更高版本支持返回引用类型:

在第一个场景中:

pRp.GetFirstChild<ParagraphStyleId>()
最后,在这里,通过向父实例中添加新对象,再次对其进行操作


主要区别在于,在第一种情况下,您操作的是ParagraphStyleId对象的副本,而在第二种情况下,您直接操作的是父实例,即pRp。

Awesome!谢谢
pRp.GetFirstChild<ParagraphStyleId>().Remove();
pRp.InsertAt(new ParagraphStyleId() { Val = "Heading1" }, 0);