Pourquoi est-ce que j'obtiens une erreur ambiguë
-
21-12-2019 - |
Question
Sous Windows 8, cela fonctionnait bien.Lorsque je l'ai mis à niveau vers Windows 8.1, j'ai eu une erreur :
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)'...
Voici ma méthode qui obtient l'erreur :
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;
}
Est-ce que quelqu'un peut m'aider?
Merci.
La solution
Vous pouvez résoudre votre problème en utilisant l'espace de nom complet:
var randomAccessStream =
System.IO.WindowsRuntimeStreamExtensions.AsRandomAccessStream(memStream);
Comme c'est une méthode d'extension, vous pouvez l'appeler comme indique le code.
Autres conseils
Ce qui se passe, c'est que AsRandomAccessStream
existe dans plusieurs espaces de noms dans la portée .Le compilateur ne peut pas savoir à lequel vous faites référence.Vous avez deux options :
- Supprimez l'espace de noms dont vous n'avez pas besoin et qui contient également
AsRandomAccessStream
- Spécifiez le chemin complet vers
AsRandomAccessStream
commeSystem.IO.WindowsRuntimeStreamExtensions.AsRandomAccessStream
Je suppose que EventHandler.UI.Extensions.StreamExtensions.AsRandomAccessStream
a peut-être été ajouté par la mise à jour et System.IO.WindowsRuntimeStreamExtensions.AsRandomAccessStream
est celui que vous utilisiez déjà.
AsRandomAccessStream
est une méthode d'extension, et vous ne pouvez pas casting une méthode vers un espace de noms.Donc tu ne peux pas faire quelque chose comme object.ExtensionMethod() from MyNameSpace.ExtensionMethods
ou alors, pour autant que je sache...Si c'est réellement possible, j'aimerais le savoir moi-même !Vous ne pouvez donc appeler cette méthode d’extension que comme n’importe quelle autre méthode de classe statique classique.
Un petit exemple de code ne fait jamais de 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)
{
}
}
}