el.Attribute(“...”) 和 el.Attribute(XName.Get(“...”)) 之间有区别吗?
在我们的生产代码中,我看到使用显式 XName.Get
调用读取 XML 属性:
var name = element.Attribute (XName.Get ("name"));
我过去总是将字符串传递给 Attribute
:
var name = element.Attribute ("name");
这更具可读性,但我想知道逻辑或性能是否有任何差异。
In our production code, I've seen XML attributes being read using explicit XName.Get
call:
var name = element.Attribute (XName.Get ("name"));
I used to always pass a string to Attribute
:
var name = element.Attribute ("name");
This is more readable but I wonder if there is any difference in logic or performance.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
没有任何区别。
XName
具有来自调用XName.Get
的string
的隐式转换。你可以在源码中看到这一点:
There is no difference whatsoever.
XName
has an implicit cast fromstring
which callsXName.Get
.You can see this in the source:
嗯,这有两个部分:
它们是否调用相同的
Attribute
方法?是的。只有一个
XElement.Attribute
方法,带有
XName
参数,这意味着在后一种情况下,您将使用隐式字符串到XName
转换。隐式字符串到
XName
转换的效果是否与XName.Get
相同?不能保证这一点 - 文档没有提及它。但我没有理由怀疑 SLAks 的分析,即当前的实现是相同的。
就个人而言,我总是要么使用从字符串到
XName
的转换,要么使用XNamespace
和字符串之间的加法运算符来获取XName
。我不记得上次明确提到它是什么时候了。可用的转换是 LINQ to XML 的美妙之处之一 - 在我看来,忽略它们似乎毫无意义。
Well, there are two parts to this:
Are they calling the same
Attribute
method?Yes. There's only one
XElement.Attribute
method, with anXName
parameter, which means that in the latter case you are using the implicit string toXName
conversion.Does the implicit string to
XName
conversion do the same asXName.Get
?This isn't guaranteed - the documentation doesn't mention it. But I have no reason to doubt SLaks' analysis that the current implementation is the same.
Personally I always either use the conversion from string to
XName
or the addition operator betweenXNamespace
and string to get anXName
. I can't remember the last time I referred to it explicitly.The conversions available are one of the beautiful things about LINQ to XML - it seems pointless to ignore them, IMO.