I came across this kind of by accident.  I wanted to have a typed return
from an ArrayList and I was already using ArrayList so I just created my own
class and derived it from ArrayList.  I used the "new" keyword to hide the
array indexer and cast the return to a string.  (I know!  I would not do
this for real, but I was just testing something to see if it would work.
:-)  I create an object of the derived class, add a few strings and
XmlSerialize it to disk.  Under Window's .NET framework 1.1 it generates an
.xml file with the strings I added.  Under Mono/RH9 I get a "Ambiguous
matching in method resolution" error.

I know this is terrible code, but technically I think it should still work.

Below is a test program I've found duplicates the problem.  This works ok on
Windows with the following XML output:

[WINDOWS XP Pro on .NET 1.1]
<?xml version="1.0"?>
<ArrayOfAnyType xmlns:xsd="http://www.w3.org/2001/XMLSchema";
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
  <anyType xsi:type="xsd:string">Test1</anyType>
  <anyType xsi:type="xsd:string">Test2</anyType>
  <anyType xsi:type="xsd:string">Test3</anyType>
</ArrayOfAnyType>

[MONO 0.25 on RedHat 9]
[EMAIL PROTECTED] sish]$ mono MethodHideTest.exe
Ambiguous matching in method resolution
in <0x001ee> 00 System.MonoType:GetPropertyImpl
(string,System.Reflection.BindingFlags,System.Reflection.Binder,System.Type,
System.Type[],System.Reflection.ParameterModifier[])
in <0x00070> 00 System.Type:GetProperty (string)
in <0x00222> 00
System.Xml.Serialization.XmlSerializationWriterInterpreter:WriteListContent
(System.Xml.Serialization.TypeData,System.Xml.Serialization.ListMap,object)
in <0x00190> 00
System.Xml.Serialization.XmlSerializationWriterInterpreter:WriteListElement
(System.Xml.Serialization.XmlTypeMapping,object,string,string)
in <0x00308> 00
System.Xml.Serialization.XmlSerializationWriterInterpreter:WriteObject
(System.Xml.Serialization.XmlTypeMapping,object,string,string,bool,bool,bool
)
in <0x00145> 00
System.Xml.Serialization.XmlSerializationWriterInterpreter:WriteObject
(object)
in <0x0000e> 00 System.Xml.Serialization.XmlSerializer:Serialize
(object,System.Xml.Serialization.XmlSerializationWriter)
in <0x00045> 00 System.Xml.Serialization.XmlSerializer:Serialize
(System.Xml.XmlWriter,object,System.Xml.Serialization.XmlSerializerNamespace
s)
in <0x00070> 00 System.Xml.Serialization.XmlSerializer:Serialize
(System.IO.Stream,object)
in <0x0010d> 00 MethodHideTest.Class1:Main (string[])

-----------------
[The test program]
file: "Class1.cs"

using System;
using System.Xml.Serialization;
using System.IO;

namespace MethodHideTest
{
        /// <summary>
        /// Summary description for Class1.
        /// </summary>
        class Class1
        {
                /// <summary>
                /// The main entry point for the application.
                /// </summary>
                [STAThread]
                static void Main(string[] args)
                {
                        MyArrayList myList = new MyArrayList();

                        myList.Add("Test1");
                        myList.Add("Test2");
                        myList.Add("Test3");

                        XmlSerializer xs = new XmlSerializer(typeof(MyArrayList) );

                        FileStream fs = null;

                        try
                        {
                                fs = File.Open("testout.xml", FileMode.Create, 
FileAccess.Write);
                        }
                        catch (Exception e)
                        {
                                Console.WriteLine(e.Message);
                                return;
                        }

                        try
                        {
                                xs.Serialize(fs, myList);
                        }
                        catch (Exception ex)
                        {
                                Console.WriteLine(ex.Message);
                                Console.WriteLine(ex.InnerException);
                                Console.WriteLine(ex.StackTrace);
                                return;
                        }
                        finally
                        {
                                fs.Close();
                        }

                        Console.WriteLine("Hit 'Enter' to exit...");
                        Console.ReadLine();
                }
        }
}

file: "MyArrayList.cs"

using System;

namespace MethodHideTest
{
        /// <summary>
        ///
        /// </summary>
        public class MyArrayList : System.Collections.ArrayList
        {
                public MyArrayList()
                        : base()
                {
                }

                public new object this[ int index ]
                {
                        get
                        {
                                return (string)base[index];
                        }
                }

        }
}


_______________________________________________
Mono-list maillist  -  [EMAIL PROTECTED]
http://lists.ximian.com/mailman/listinfo/mono-list

Reply via email to