The following code causes a compiler error, as it is ambiguous call but the problem if we use object
instead of ArrayList
no error happens and the string
version works fine; Do you have an explanation for that?
class A
{
public A(string x)
{
Console.WriteLine("string");
}
public A(ArrayList x)
{
Console.WriteLine("ArrayList");
}
}
static void Main(string[] args)
{
A o = new A(null);
}
The reason your code works fine if you change the constructor that takes an ArrayList
to take an object
is that the C# compiler will pick the most specific type applicable. In the case of string
/object
, string
actually derives from object
and is therefore "more specific" and will be inferred by the compiler. With string
versus ArrayList
, it's apples and oranges: either can be null, but neither is more "specific" than the other.