在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