왜 모호한 오류가 발생합니까?
-
21-12-2019 - |
문제
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;
}
.
누군가가 나를 도울 수 있습니까?
감사합니다.
해결책
전체 네임 스페이스를 사용하여 문제를 해결할 수 있습니다.
var randomAccessStream =
System.IO.WindowsRuntimeStreamExtensions.AsRandomAccessStream(memStream);
.
확장 방법이므로 코드가 보여주는 방식을 호출 할 수 있습니다.
다른 팁
일어나는 일은 하나 이상의 네임 스페이스가 범위에있는 경우 AsRandomAccessStream
가 존재한다는 것입니다.컴파일러는 당신이 언급하는 것을 알 수 없습니다.두 가지 옵션이 있습니다 :
-
AsRandomAccessStream
가 포함되어 있지 않은 네임 스페이스를 제거하십시오.
-
AsRandomAccessStream
와 같은
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)
{
}
}
}
. 제휴하지 않습니다 StackOverflow