在using语句中使用的字节类型必须隐式地转换为System.IDisposable

本文关键字:转换 IDisposable System 类型 语句 using 字节 | 更新日期: 2023-09-27 18:08:29

为什么我得到错误时使用以下代码?难道用"正在使用"这个关键字还不够吗?我怎样才能解决这个问题。

错误:using语句中使用的byte[]类型必须是隐式的可转换为系统。IDisposable

class Class1
{
     public void UploadFile()
     {
          using(var v = class2.GetByteStream())  //getting error on this line
          {
               //rest of code here
          }
     }
}
class Class2
{
     public byte[] GetByteStream()
     {
          using (MemoryStream ms = new MemoryStream())
          {
               //some code here
               return ms.ToArray();
          }
     }     
}

在using语句中使用的字节类型必须隐式地转换为System.IDisposable

由于错误试图告诉您,您不能这样做。

using语句只存在于调用Dispose()

如果你的类型没有任何本地资源,它不会实现IDisposable,也不需要using语句。

您只需要在Class2.GetByteStream()中的MemoryStream周围添加using块。

Class1.UploadFile()中,您所需要的只是byte[] v = class2.GetByteStream()。在GetByteStream()中,流已经被正确处理。

using语句用于调用IDisposable。Dispose方法,只能与实现了IDisposable的类型一起使用。字节数组不需要被处置,也不实现IDisposable。

下面是正确的代码:
class Class1
{
     public void UploadFile()
     {
          var v = class2.GetByteStream();
          //rest of code here
     }
}
class Class2
{
     public byte[] GetByteStream()
     {
          using (MemoryStream ms = new MemoryStream())
          {
               //some code here
               return ms.ToArray();
          }
     }     
}