インスタンスのプロパティで XML ドキュメントを作成したいと考えています。そのために、2 つの拡張機能を作成します。
<Extension()>
Public Function ToXml(Of T)(ByVal source As T) As XmlDocument
Dim oXmlDocument As New XmlDocument
oXmlDocument.AppendChild(oXmlDocument.CreateXmlDeclaration("1.0", "utf-8", Nothing))
oXmlDocument.AppendChild(oXmlDocument.CreateElement(XmlConvert.EncodeName(source.GetType.ToString)))
For Each Item As System.Reflection.FieldInfo In source.GetType.GetFields
Dim oElement As XmlElement = oXmlDocument.CreateElement(Item.Name)
oElement.Attributes.Append(oXmlDocument.CreateAttribute("Value")).Value = Item.GetValue(Nothing).ToString
oXmlDocument.DocumentElement.AppendChild(oElement)
Next
Return oXmlDocument
End Function
<Extension()>
Public Function ToXml(Of T)(ByVal source As IEnumerable(Of T)) As XmlDocument
Dim oXmlDocument As New XmlDocument
oXmlDocument.AppendChild(oXmlDocument.CreateXmlDeclaration("1.0", "utf-8", Nothing))
oXmlDocument.AppendChild(oXmlDocument.CreateElement(XmlConvert.EncodeName(source.GetType.ToString)))
For Each Item As T In source
oXmlDocument.DocumentElement.AppendChild(oXmlDocument.ImportNode(Item.ToXml.DocumentElement, True))
Next
Return oXmlDocument
End Function
2 番目の方法は by の型に使用IEnumerable(Of T)
し、最初の方法は他のすべての型に使用する必要があります。Button
、String
、またはこのようなインスタンスで試してみると、Int32
うまくいきます。ie のインスタンスでList(Of T)
も、最初のメソッドが呼び出されます。IEnumerable(Of T)
Tの拡張子の方が範囲が広いため、拡張子のforは無視されているようです。
List(Of T)
拡張機能の使用を強制する可能性はありIEnumerable(Of T)
ますか?