在Windows8中它工作正常。当我将其升级到Windows8.1时,我收到错误:

Error   1   The call is ambiguous between the following methods or properties: 'System.IO.WindowsRuntimeStreamExtensions.AsRandomAccessStream(System.IO.Stream)' and 'EventHandler.UI.Extensions.StreamExtensions.AsRandomAccessStream(System.IO.Stream)'...

这是我得到错误的方法:

public BitmapImage ConvertByteArrayToBitMapImage(byte[] imageByteArray)
{
    BitmapImage bitmapImg = new BitmapImage();
    MemoryStream memStream = new MemoryStream(imageByteArray);

    var randomAccessStream = memStream.AsRandomAccessStream(); //This line has error.
    bitmapImg.SetSourceAsync(randomAccessStream);

    return bitmapImg;
}

有人能帮我吗?

谢谢.

有帮助吗?

解决方案

您可以使用完整名称空间解决问题:

  var randomAccessStream = 
     System.IO.WindowsRuntimeStreamExtensions.AsRandomAccessStream(memStream);
.

因为它是一个扩展方法,您可以通过代码显示的方式调用它。

其他提示

这是怎么回事 AsRandomAccessStream 存在于作用域中的多个命名空间中。编译器无法知道您所指的是哪一个。你有两个选择:

  • 删除您不需要的命名空间,该命名空间也包含 AsRandomAccessStream
  • 指定完整的路径 AsRandomAccessStreamSystem.IO.WindowsRuntimeStreamExtensions.AsRandomAccessStream

我的猜测是 EventHandler.UI.Extensions.StreamExtensions.AsRandomAccessStream 可能是由更新和 System.IO.WindowsRuntimeStreamExtensions.AsRandomAccessStream 是你已经用过的那个。

AsRandomAccessStream 是一种扩展方法,你不能 演员阵容 某个命名空间的方法。所以你不能做类似的事情 object.ExtensionMethod() from MyNameSpace.ExtensionMethods 至少就我所知。..如果真的有可能,我想知道自己!所以你只能像任何其他常规静态类方法一样调用这个扩展方法。

小示例代码永远不会伤害:

    using System;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Example NewExample = new Example();
            //NewExample.DoSomething(); //Ambiguous error
            ExtensionClass1.DoSomething(NewExample); //OK
        }
    }

    public class Example
    {

    }

    public static class ExtensionClass1
    {
        public static void DoSomething(this Example A)
        {
        }
    }

    public static class ExtensionClass2
    {
        public static void DoSomething(this Example A)
        {
        }
    }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top