Please do not reply to this email- if you want to comment on the bug, go to the URL shown below and enter your comments there.
Changed by [EMAIL PROTECTED] http://bugzilla.ximian.com/show_bug.cgi?id=80299 --- shadow/80299 2006-12-18 06:53:36.000000000 -0500 +++ shadow/80299.tmp.6698 2006-12-18 06:53:36.000000000 -0500 @@ -0,0 +1,73 @@ +Bug#: 80299 +Product: Mono: Class Libraries +Version: 1.2 +OS: +OS Details: +Status: NEW +Resolution: +Severity: +Priority: Wishlist +Component: CORLIB +AssignedTo: [EMAIL PROTECTED] +ReportedBy: [EMAIL PROTECTED] +QAContact: [EMAIL PROTECTED] +TargetMilestone: --- +URL: +Cc: +Summary: Array.CopyTo/Array.Copy doesn't support Enum to underlying-type conversion + +In code developed on the MSFT CLR I have: + + enum ObexHeaderId : byte { .... } +and then + + ObexHeaderId[] srcEnums = ...; + byte[] dstBytes = new byte[srcEnums.Length]; + srcEnums.CopyTo(dstBytes, 0); + +That works on MSFT CLR (desktop v2), but fails on Mono at the +Array.CopyTo with: + +System.ArrayTypeMismatchException : (Types: +source=Brecham.Obex.ObexHeaderId; target=System.Byte) + at System.Array.Copy (System.Array sourceArray, Int32 sourceIndex, +System.Array destinationArray, Int32 destinationIndex, Int32 length) +[0x00174] in C:\cygwin\tmp\scratch\mono-1.2.2.1 +\mcs\class\corlib\System\Array.cs:932 + at System.Array.CopyTo (System.Array array, Int32 index) [0x00089] in +C:\cygwin\tmp\scratch\mono-1.2.2.1\mcs\class\corlib\System\Array.cs:1752 + at Brecham.Obex.ObexClientSession.LogHeaderIds (System.String message, +Brecham.Obex.ObexHeaderId[] keys) [0x00000] + [...] + +It fails on the NETCFv2 with InvalidCastException, btw. + + +A workaround is straightforward. I've changed my code to use the +elements manually, but a for loop over the array casting the element on +copying, is of course straighforward. + + +ECMA's Array.pdf in tr-084.zip says: +"If sourceArray and destinationArray are of different types, +System.Array.Copy performs widening conversions on the elements [...]" +and +"If the necessary conversion is a narrowing conversion, a +System.ArrayTypeMismatchException exception is thrown. [Note: For +information regarding valid conversions performed by this method, see +System.Convert.]" + +There is hardly any text in the CopyTo method, so do we assume that text +applies to it too? + +I presume the necessary conversion here is not a "narrowing conversion", +and nor is it a "widening conversion". So where does this case lie? + +Again MSDN seems not to cover this case. + + +A set of test cases is included. They show that copy only is successful +when the type of the destination array is the same as the 'underlying' +type of the enum. For instance, counterintuitively, an array of 'byte' +enums fails to copy to an Int32 array. This maybe suggests that this +behaviour on the MSFT CLR is just by side effect and not intentional... _______________________________________________ mono-bugs maillist - [email protected] http://lists.ximian.com/mailman/listinfo/mono-bugs
