0

私たちの製品コードでは、明示的なXName.Get呼び出しを使用して XML 属性が読み取られるのを見てきました。

var name = element.Attribute (XName.Get ("name"));

私は常に文字列をに渡していましたAttribute

var name = element.Attribute ("name");

これは読みやすいですが、ロジックやパフォーマンスに違いがあるのだろうか。

4

2 に答える 2

6

違いはありません。を呼び出す
XName暗黙のキャストがあります。stringXName.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;
}
于 2011-07-29T12:59:12.090 に答える
1

これには 2 つの部分があります。

Attribute彼らは同じメソッドを呼び出していますか?

はい。XElement.Attributeパラメーターを持つメソッドは1 つしかありませXNameん。つまり、後者の場合、XName変換に暗黙的な文字列を使用していることになります。

暗黙の文字列からXName変換への変換は と同じXName.Getですか?

これは保証されていません。ドキュメントには記載されていません。しかし、現在の実装が同じであるという SLaks の分析を疑う理由はありません。


個人的には、私は常に文字列からへの変換を使用するか、文字列と文字列XNameの間の加算演算子を使用して. 最後に明示的に言及したのはいつか思い出せません。XNamespaceXName

利用可能な変換は、LINQ to XML の素晴らしい点の 1 つです。IMO を無視するのは無意味に思えます。

于 2011-07-29T13:03:31.123 に答える