VB.NET эквивалент безымянной переменной в C #? - PullRequest
2 голосов
/ 31 марта 2011

В C # вы можете сделать это:

new MyClass().MyMethod();

Метод выполняется, и ссылка (как правило) отбрасывается, поскольку ссылка на объект не сохраняется.

Мой вопрос: возможно ли это с VB.NET (.NET v4)?


Редактировать: Полагаю, это лучший пример:

new Thread((x) => doSomething()).Start();

Возможно ли это даже в VB.NET?

Ответы [ 4 ]

4 голосов
/ 31 марта 2011

В VB.NET действуют более строгие правила относительно синтаксиса оператора. Языки с фигурными скобками позволяют любому выражению также быть оператором, просто заканчивая его точкой с запятой. Это не относится к VB.NET. Вы можете использовать этот синтаксис, только если метод, который вы вызываете, является функцией. Что позволяет использовать оператор присваивания:

    Dim result = New Test().Func()

Если это Sub, вам придется использовать оператор присваивания для хранения ссылки на объект. В противном случае это не влияет на время выполнения, ссылка оптимизируется.

2 голосов
/ 31 марта 2011

Если вы явно хотите вызывать подпрограмму, а не функцию, вы можете:

Call (New obj).Func()

который анонимно создаст новый объект и вызовет его метод Func ()

2 голосов
/ 31 марта 2011

В дополнение к ответу Ганса вы можете использовать выражение With:

Sub Main
    With New Person("Ahmad")
        .PrintName()
        .Name = "Mageed"
        .PrintName()
    End With
End Sub

Public Class Person
    Public Property Name As String
    Public Sub New(ByVal name As String)
        Me.Name = name
    End Sub

    Public Sub PrintName()
        Console.WriteLine("Name: {0} - Len: {1}", Name, Name.Length)
    End Sub
End Class

Это не так кратко, как C #, но ссылка на объект отбрасывается после End With.

1 голос
/ 31 марта 2011

Вы можете выполнять лямбда-функции в VB.NET следующим образом:

Dim test = Function (x)
    x.doStuff()
End Function

Что семантически эквивалентно:

var test = (x) => x.doStuff();

Я думаю, что единственным ограничением является то, что он должен возвращать результат в VB.NET.

...