Перевести простой код с синтаксисом C#6 на Vb.Net

Кто-то может помочь мне перевести этот простой фрагмент, который использует новый синтаксис C# 6, в Vb.Net?

Полученный запрос LINQ является неполным (неправильный синтаксис) при выполнении перевода в некоторых онлайн-сервисах, таких как Telerik.

/// <summary>
///     An XElement extension method that removes all namespaces described by @this.
/// </summary>
/// <param name="this">The @this to act on.</param>
/// <returns>An XElement.</returns>
public static XElement RemoveAllNamespaces(this XElement @this)
{
    return new XElement(@this.Name.LocalName,
        (from n in @this.Nodes()
            select ((n is XElement) ? RemoveAllNamespaces(n as XElement) : n)),
        (@this.HasAttributes) ? (from a in @this.Attributes() select a) : null);
}

2 ответа

Решение

Дайте этому шанс:

<System.Runtime.CompilerServices.Extension()> _
Public Function RemoveAllNamespaces(this As XElement) As XElement
    Return New XElement(this.Name.LocalName,
        (From n In this.Nodes
         Select (If(TypeOf n Is XElement, TryCast(n, XElement).RemoveAllNamespaces(), n))),
        If((this.HasAttributes), (From a In this.Attributes Select a), Nothing))
End Function

Если вы будете конвертировать другой код, вот шаги, которые я предпринял:

  • Добавил Extension атрибут, потому что VB не имеет синтаксиса, как C# для создания методов расширения.
  • Заменен троичный оператор C# на VB If(condition, true, false),
  • Замененные C# бросает с VB TryCast(object, type),
  • Заменили проверку типа C# на VB TypeOf object Is type,
  • Замененный C# null с VB Nothing,

Включая xml-комментарии и исправляя ошибку "RemoveAllNamespaces" в другом ответе, ваш VB-эквивалент:

''' <summary>
'''     An XElement extension method that removes all namespaces described by @this.
''' </summary>
''' <param name="this">The @this to act on.</param>
''' <returns>An XElement.</returns>
<System.Runtime.CompilerServices.Extension> _
Public Function RemoveAllNamespaces(ByVal this As XElement) As XElement
    Return New XElement(this.Name.LocalName, (
        From n In this.Nodes()
        Select (If(TypeOf n Is XElement, RemoveAllNamespaces(TryCast(n, XElement)), n))),If(this.HasAttributes, (
            From a In this.Attributes()
            Select a), Nothing))
End Function
Другие вопросы по тегам