I have a CLR dll which declares an enumeration FieldID. It’s just an
ordinary C# enum
I have the following code which used to work under 0.9
fields_to_read = [FieldID.DBID, FieldID.Name]
clr_fields = System::Array[FieldID].new fields_to_read
Under 0.9.1, the following exception occurs:
System::InvalidCastException: The result type ‘System.Int32’ of the
dynamic
binding produced by binder ‘ConvertToFixnumAction @1’ is not compatible
with
the result type ‘Interop.FieldID’ expected by the call site.
from Microsoft.Scripting.Core:0:in Bind' from Microsoft.Scripting.Core:0:in
BindCore’
from (irb):71
from :0:in eval' from workspace.rb:80:in
evaluate’
from context.rb:217:in evaluate' from irb.rb:147:in
eval_input’
from irb.rb:257:in signal_status' from irb.rb:146:in
eval_input’
from ruby-lex.rb:230:in each_top_level_statement' from :0:in
loop’
from C:/Dev/TEST/ruby/lib/ruby/1.8/irb.rb:146:in eval_input' from C:/Dev/TEST/ruby/lib/ruby/1.8/irb.rb:70:in
start’
from :0:in catch' from C:/Dev/TEST/ruby/lib/ruby/1.8/irb.rb:69:in
start’
from C:/Dev/TEST/ruby/bin/iirb:13
Has the behavior for converting ruby arrays to CLR arrays changed? I’m
working around it for now by doing this:
tmp = System::Collections::Generic::List.of(FieldID).new
fields_to_read.each{|f| tmp.add f}
clr_fields = tmp.to_array
Note: I wanted to just pass the fields_to_read ruby array into the
constructor of List, but when I do this, IronRuby is selecting the
constructor overload which takes an int32 for capacity, rather than the
overload which takes IEnumerable, and I get the following error:
tmp = System::Collections::Generic::List.of(FieldID).new(fields_to_read)
TypeError: can’t convert Array into Fixnum
from (irb):75
from C:/Dev/TEST/ruby/lib/ruby/1.8/irb.rb:146:in eval_input' from :0:in
eval’
from workspace.rb:80:in evaluate' from context.rb:217:in
evaluate’
from irb.rb:147:in eval_input' from irb.rb:257:in
signal_status’
from irb.rb:146:in eval_input' from ruby-lex.rb:230:in
each_top_level_statement’
from :0:in loop' from C:/Dev/TEST/ruby/lib/ruby/1.8/irb.rb:70:in
start’
from C:/Dev/TEST/ruby/lib/ruby/1.8/irb.rb:69:in start' from :0:in
catch’
from C:/Dev/TEST/ruby/bin/iirb:13
Is this also a bug?
Thanks a lot, Orion