私たちの製品コードでは、明示的なXName.Get
呼び出しを使用して XML 属性が読み取られるのを見てきました。
var name = element.Attribute (XName.Get ("name"));
私は常に文字列をに渡していましたAttribute
:
var name = element.Attribute ("name");
これは読みやすいですが、ロジックやパフォーマンスに違いがあるのだろうか。
私たちの製品コードでは、明示的なXName.Get
呼び出しを使用して XML 属性が読み取られるのを見てきました。
var name = element.Attribute (XName.Get ("name"));
私は常に文字列をに渡していましたAttribute
:
var name = element.Attribute ("name");
これは読みやすいですが、ロジックやパフォーマンスに違いがあるのだろうか。
違いはありません。を呼び出す
XName
暗黙のキャストがあります。string
XName.Get
ソースでこれを見ることができます:
/// <summary>
/// Converts a string formatted as an expanded XML name ({namespace}localname) to an XName object.
/// </summary>
/// <param name="expandedName">A string containing an expanded XML name in the format: {namespace}localname.</param>
/// <returns>An XName object constructed from the expanded name.</returns>
[CLSCompliant(false)]
public static implicit operator XName(string expandedName) {
return expandedName != null ? Get(expandedName) : null;
}
これには 2 つの部分があります。
Attribute
彼らは同じメソッドを呼び出していますか?
はい。XElement.Attribute
パラメーターを持つメソッドは1 つしかありませXName
ん。つまり、後者の場合、XName
変換に暗黙的な文字列を使用していることになります。
暗黙の文字列からXName
変換への変換は と同じXName.Get
ですか?
これは保証されていません。ドキュメントには記載されていません。しかし、現在の実装が同じであるという SLaks の分析を疑う理由はありません。
個人的には、私は常に文字列からへの変換を使用するか、文字列と文字列XName
の間の加算演算子を使用して. 最後に明示的に言及したのはいつか思い出せません。XNamespace
XName
利用可能な変換は、LINQ to XML の素晴らしい点の 1 つです。IMO を無視するのは無意味に思えます。