1

C# .NET 4.0 アプリケーションで使用する COM API があります。

コードは次のようになります。

if (!object.ReferenceEquals((comObject.Value), null))
{
   // Do something
}

comObjectはタイプでSystem.__ComObjectありValue、タイプは ですdynamic

一般に、これは正常に機能しますが、実際の型がバイト配列の場合、次の例外Valueがスローされます。InvalidCastException

   Unable to cast object of type 'System.Byte[*]' to type 'System.Byte[]'.

   at CallSite.Target(Closure , CallSite , Type , Object , Object )
   at System.Dynamic.UpdateDelegates.UpdateAndExecute3[T0,T1,T2,TRet](CallSite site, T0 arg0, T1 arg1, T2 arg2)
   at ReMetricaTypeSpike.Program.Main(String[] args) in c:\my documents\visual studio 2010\Projects\ReMetricaTypeSpike\ReMetricaTypeSpike\Program.cs:line 28
   at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
   at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
   at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
   at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.ThreadHelper.ThreadStart()

このスレッドhttp://social.msdn.microsoft.com/Forums/en/csharpgeneral/thread/24c0bd62-058a-487e-91ab-ed1bb0b0cca4は、配列が 1 ベースであるため例外がスローされていることを示唆しているようです (それは - APIはVBで書かれたと思います)。ただし、このキャストを明示的にすることは決してありません。これはすべて、動的な automagic コードによって処理されます。

これは C# の動的な既知のバグですか? それとも何か他のことが起こっていますか?

4

0 に答える 0