あいまいなエラーが発生するのはなぜですか
-
21-12-2019 - |
質問
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
スコープ内にある複数の名前空間に存在します。コンパイラは、あなたが参照しているものを知ることができません。次の2つのオプションがあります。:
- 必要のない名前空間を削除します。
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)
{
}
}
}