¿Por qué recibo un error ambiguo?
-
21-12-2019 - |
Pregunta
En Windows 8 funcionó bien.Cuando lo actualicé a Windows 8.1 recibí un error:
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)'...
Aquí está mi método que recibe el error:
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;
}
¿Alguien me puede ayudar?
Gracias.
Solución
Puede solucionar su problema usando el espacio de nombres completo:
var randomAccessStream =
System.IO.WindowsRuntimeStreamExtensions.AsRandomAccessStream(memStream);
Como es un método de extensión, puede llamarlo de la forma en que se muestra el código.
Otros consejos
lo que esta pasando es que AsRandomAccessStream
existe en más de un espacio de nombres dentro del alcance.El compilador no puede saber a cuál te refieres.Tienes dos opciones:
- Elimine el espacio de nombres que no necesita y que también contiene
AsRandomAccessStream
- Especifique la ruta completa a
AsRandomAccessStream
comoSystem.IO.WindowsRuntimeStreamExtensions.AsRandomAccessStream
Mi conjetura es que EventHandler.UI.Extensions.StreamExtensions.AsRandomAccessStream
posiblemente fue agregado por la actualización y System.IO.WindowsRuntimeStreamExtensions.AsRandomAccessStream
es el que ya estabas usando.
AsRandomAccessStream
es un método de extensión y no puedes elenco un método para algún espacio de nombres.Entonces no puedes hacer algo como object.ExtensionMethod() from MyNameSpace.ExtensionMethods
o algo así, hasta donde yo sé...Si es realmente posible, ¡me gustaría conocerlo yo mismo!Por lo tanto, solo puede llamar a este método de extensión como cualquier otro método de clase estática normal.
Un pequeño código de ejemplo nunca viene mal:
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)
{
}
}
}