在C#中,可以這樣做:VB.NET等價於C#中的無名變量?
new MyClass().MyMethod();
被執行的方法和參考文獻是(通常)被丟棄,因爲該對象沒有參考被保持。
我的問題是:這可能與VB.NET(.NET v4)?
編輯:我想這是一個更好的例子:
new Thread((x) => doSomething()).Start();
在VB.NET這甚至可能嗎?
在C#中,可以這樣做:VB.NET等價於C#中的無名變量?
new MyClass().MyMethod();
被執行的方法和參考文獻是(通常)被丟棄,因爲該對象沒有參考被保持。
我的問題是:這可能與VB.NET(.NET v4)?
編輯:我想這是一個更好的例子:
new Thread((x) => doSomething()).Start();
在VB.NET這甚至可能嗎?
VB.NET對語句的語法有更嚴格的規則。花括號語言允許任何表達式也可以作爲語句,只需用分號終止即可。 VB.NET不是這種情況。如果您調用的方法是Function,則只能使用此語法。它允許您使用賦值語句:
Dim result = New Test().Func()
如果它是一個子,那麼你就必須使用賦值語句來存儲對象引用。這否則沒有運行效果,參考被優化了。
你可以做的lambda函數在VB.NET這樣的:
Dim test = Function (x)
x.doStuff()
End Function
這將是語義equivilent到:
var test = (x) => x.doStuff();
我覺得一個限制是,它雖然必須返回一個結果在VB.NET下。
除了漢斯的答案,你可以使用一個With
statement:
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
之後被丟棄。
哦,所以你實際上*可以*創建一個臨時引用。這也是很好的知道,謝謝! – qJake 2011-03-31 15:05:29
如果你想明確地調用子,而不是一個功能,您可以:
Call (New obj).Func()
這將匿名創建一個新的OBJ,並調用它的函數功能()方法
因此短期答案是「不」,這是不完全可能的(僅部分),因爲VB的結構。謝謝。 – qJake 2011-03-31 14:39:42
嗯,我更喜歡我的回答。但是,我是部分的。 – 2011-03-31 14:52:47