在Windows 8中,它运行良好。 当我将其升级到Windows 8.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;
}
有人可以帮助我吗?
感谢。
答案 0 :(得分:2)
您可以使用完整命名空间修复问题:
var randomAccessStream =
System.IO.WindowsRuntimeStreamExtensions.AsRandomAccessStream(memStream);
由于它是一种扩展方法,您可以按照代码显示的方式调用它。
答案 1 :(得分:2)
发生的事情是AsRandomAccessStream
存在于范围内的多个命名空间中。编译器无法知道您指的是哪一个。您有两种选择:
AsRandomAccessStream
AsRandomAccessStream
<{1}}的完整路径,例如System.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)
{
}
}
}