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

byte type used in a using statement must be implicitly convertible to System.IDisposable

为什么在使用以下代码时出现错误?不应该使用 "using" 关键字就足够了吗?我该如何解决它。

Error: byte[] type used in a using statement must be implicitly convertible to System.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 语句只存在调用 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();
          }
     }     
}