我正在将一段代码从VB.net转换为C#,我被困在这一部分
If Not IsNothing(successNode) Then
Dim _data As XElement = (From xml In xDoc.Descendants("data") Select xml).FirstOrDefault
Dim _count As Integer = _data.@count
If _count > 0 Then
_objectCollection = New QueryObjectCollection(_data.@listtype)
For Each item As XElement In _data.Elements(_data.@listtype)
If Not IsNothing(item.<RECORDNO>) Then
_objectCollection.Keys.Add(item.<RECORDNO>.Value)
_objectCollection.Objects.Add(item)
End If
Next
End If
End if
不确定_data.@count
和_data.@listtype
是什么。是否有相同的功能ic C#?
有人可以帮助我将此部分代码转换为c#?
答案 0 :(得分:10)
这只是VB的简写。
在VB中:
_data.@count
_data.@listtype
在C#中:
_data.Attribute("count").Value
_data.Attribute("listtype").Value
具体来说,这是名为“XML Literals”的VB.Net语言特性的一部分,并与LINQ to XML结合使用。 (C#有LINQ,但没有XML文字。)
VB代码中的.@name
表示法在XElement
上使用时表示您要从具有指定名称的XML元素中检索属性。还有一个VB语法看起来像...<name>
来检索指定名称的元素,它将映射到C#.Element("name").Value
。
请参阅Overview of LINQ to XML in Visual Basic和XML Literals Overview。
答案 1 :(得分:6)
@用于访问_data表示的XElement上的XAttributes(而&lt;&gt;表示法访问子XElements)。 您的C#端口应如下所示:
if (successNode != null)
{
var _data = xDoc.Descendants("data").FirstOrDefault();
var _count = int.Parse(_data.Attribute("count").Value);
if(_count > 0)
{
var listType = _data.Attribute("listtype").Value;
_objectCollection = new QueryObjectCollection(listType);
foreach (var item in _data.Elements(listType))
{
var recordNo = item.Element("RECORDNO");
if (recordNo != null)
{
_objectCollection.Keys.Add(recordNo.Value);
_objectCollection.Objects.Add(item);
}
}
}
}