VB.net转换为c#

SQL*_*ner 1 c# vb.net

我正在将一段代码从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
Run Code Online (Sandbox Code Playgroud)

不确定是什么_data.@count和_data.@listtype.是否有相同的功能ic C#?

有人可以帮我把这部分代码转换成c#吗?

Mat*_*int 10

这只是VB的简写.

在VB中:

_data.@count
_data.@listtype
Run Code Online (Sandbox Code Playgroud)

在C#中:

_data.Attribute("count").Value
_data.Attribute("listtype").Value
Run Code Online (Sandbox Code Playgroud)

具体来说,这是名为"XML Literals"的VB.Net语言特性的一部分,并与LINQ to XML结合使用.(C#有LINQ,但没有XML文字.)

.@nameVB代码中的表示法,当用于XElement表示您要从具有指定名称的XML元素中检索属性时.还有一种VB语法,它看起来像...<name>检索指定名称的元素,该元素将映射到C#.Element("name").Value.

请参阅Visual Basic中的LINQ to XML 概述和XML文本概述.


Sam*_*son 6

@用于访问_data表示的XElement上的XAttributes(而<>表示法访问子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);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)