Перевести простой код с синтаксисом 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
с VBNothing
,
Включая 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