为什么我用这个WinRT代码得到''System.Array'不包含'AsBuffer'的定义?

B. *_*non 3 c# bytearray bitmapimage system.array windows-runtime

根据这个,可以使用以下代码将字节数组转换为BitmapImage:

public static async Task<BitmapImage> ByteArrayToBitmapImage(this byte[] byteArray)
{
    if (byteArray != null)
    {
        using (var stream = new InMemoryRandomAccessStream())
        {
            await stream.WriteAsync(byteArray.AsBuffer());
            var image = new BitmapImage();
            stream.Seek(0);
            image.SetSource(stream);
            return image;
        }
    }
    return null;
}
Run Code Online (Sandbox Code Playgroud)

但是,我得到," 'System.Array'不包含'AsBuffer'的定义,并且没有扩展方法'AsBuffer'可以找到类型'System.Array'的第一个参数'(你是否错过了使用指令或者装配参考?) "

是"var stream"赋值太模糊(隐式类型),我需要为"stream"var指定一个特定的数据类型吗?System.Array以外的东西?

也许这一点,来自" Windows Store Apps Succinctly "是一个线索: 缓冲区/字节数组--System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeBufferExtensions:此类中的扩展方法提供了在.NET字节数组和WinRT缓冲区内容之间移动的方法,这些内容作为IBuffer实现公开.

...但如果是的话,那对我来说不足以让我知道如何处理它.而不是"TMI",它是"NEI"(没有足够的信息).

dbc*_*dbc 8

问题是编译器没有找到扩展方法 AsBuffer().确保你有一个对命名空间的引用System.Runtime.InteropServices.WindowsRuntime,即

using System.Runtime.InteropServices.WindowsRuntime;
Run Code Online (Sandbox Code Playgroud)

如果还没有,还需要添加对相应DLL 的引用:

命名空间:System.Runtime.InteropServices.WindowsRuntime

程序集:System.Runtime.WindowsRuntime(在System.Runtime.WindowsRuntime.dll中)

  • 我尝试添加引用,但收到错误消息,无法添加它,因为它已被构建系统自动引用。所以我添加了 using 语句并编译。所以这让我想知道,如果所需的参考已经存在,为什么 VS 不知道这一点并给我一个“解决”上下文菜单项?无论如何,一切都好,结局好,我想 - 谢谢! (2认同)