"使用"语句如何从C#转换为VB?

Dan*_*iel 46 .net c# vb.net visual-studio-2005 .net-2.0

例如:

BitmapImage bitmap = new BitmapImage();

byte[] buffer = GetHugeByteArray(); // from some external source
using (MemoryStream stream = new MemoryStream(buffer, false))
{
    bitmap.BeginInit();
    bitmap.CacheOption = BitmapCacheOption.OnLoad;
    bitmap.StreamSource = stream;
    bitmap.EndInit();
    bitmap.Freeze();
}
Run Code Online (Sandbox Code Playgroud)

你能告诉我更多关于using什么的吗?

编辑:

正如JaredPar的帖子中所讨论的那样,这个问题更关注UsingVS2003中的实现.有人指出,Using直到.NET 2.0(VS2005)才引入.JaredPar发布了一个相同的解决方法.

Jar*_*Par 64

假设您使用的是.NET 2.0或更高版本(这意味着VB.NET v8编译器或更高版本),则在VB中使用与C#几乎相同的语法.基本上,只需删除大括号并添加"结束使用"

Dim bitmap as New BitmapImage()
Dim buffer As Byte() = GetHugeByteArrayFromExternalSource()
Using stream As New MemoryStream(buffer, false)
    bitmap.BeginInit()
    bitmap.CacheOption = BitmapCacheOption.OnLoad
    bitmap.StreamSource = stream
    bitmap.EndInit()
    bitmap.Freeze()
End Using
Run Code Online (Sandbox Code Playgroud)

您可以在此处获取完整的文档

编辑

如果您使用的是VS2003或更早版本,则需要以下代码.直到VS 2005,.NET 2.0(参考)才引入using语句.谢谢克里斯!以下等同于using语句.

Dim bitmap as New BitmapImage()
Dim buffer As Byte() = GetHugeByteArrayFromExternalSource()
Dim stream As New MemoryStream(buffer, false)
Try
    bitmap.BeginInit()
    bitmap.CacheOption = BitmapCacheOption.OnLoad
    bitmap.StreamSource = stream
    bitmap.EndInit()
    bitmap.Freeze()
Finally
    DirectCast(stream, IDisposable).Dispose()
End Try
Run Code Online (Sandbox Code Playgroud)

  • 直到VS2005才引入VB中的Using语句.它在以前的版本中不可用. (13认同)
  • 另请注意,对于Namespace引用和别名声明C#using与VB的Imports相同. (2认同)

All*_*ice 5

重要的是要指出,使用实际上编译成各种代码行,类似于锁等.

来自C#语言规范....表单的using语句

using (ResourceType resource = expression) statement
Run Code Online (Sandbox Code Playgroud)

对应于两种可能的扩展之一.何时ResourceType是值类型,扩展为

{
    ResourceType resource = expression;
    try {
        statement;
    }
    finally {
        ((IDisposable)resource).Dispose();
    }
}
Run Code Online (Sandbox Code Playgroud)

否则,当ResourceType是引用类型时,扩展为

{
    ResourceType resource = expression;
    try {
        statement;
    }
    finally {
        if (resource != null) ((IDisposable)resource).Dispose();
    }
}
Run Code Online (Sandbox Code Playgroud)

(结束语言规范片段)

基本上,在编译时它将转换为该代码.没有方法叫做使用等.我试图在vb.net语言规范中找到类似的东西,但我找不到任何东西,大概它完全一样.