惰性(T)用法/初始化

lin*_*ncx 5 vb.net lazy-evaluation

我试图弄清楚这两种懒惰用法之间的区别是什么,哪一种更适合使用,或者只是一样?

Dim context As New Lazy(Of DbContext)

Dim context As Lazy(Of DbContext) = New Lazy(Of DbContext)(Function() New DbContext())
Run Code Online (Sandbox Code Playgroud)

Ree*_*sey 5

如果 lambda 仅使用默认构造函数构造实例,则效果相同,因为Lazy<T>没有委托的构造函数仅使用类型的默认构造函数。在这种情况下,我会使用你的第一个选项。

然而,第二个选项的原因是您有时需要更多信息来构造您的对象。例如,这将是合法的并且可以正常运行:

Dim instance = New Lazy(Of SomeType)(Function() New SomeType("Foo"))
Run Code Online (Sandbox Code Playgroud)

请注意,这里我们为SomeType.