`System.Collections.ArrayList` is `ComVisible(true)`. It contains three overloads of `IndexOf` (see [here](http://referencesource.microsoft.com/#mscorlib/system/collections/arraylist.cs,9a21eb977feec66d)):

```cs
public virtual int IndexOf(Object value)
public virtual int IndexOf(Object value, int startIndex)
public virtual int IndexOf(Object value, int startIndex, int count)

```

From VBScript, only the second overload can be accessed:

```vb
Dim oList
Set oList = CreateObject("System.Collections.ArrayList")

'oList.IndexOf "foo"        'Error: Invalid procedure call or argument: 'IndexOf'
 oList.IndexOf "foo", 0
'oList.IndexOf "foo", 0, 1  'Error: Wrong number of arguments or property assignment was not valid: 'IndexOf'

```

In ['Overloading a method in com visible dll'](https://stackoverflow.com/a/25650296/1671066) Hans Passant explains that
overload methods exist in the assembly, but from script one cannot get their
dispid and therefore call them. This seems to imply that one method might make it through though.

* Can I determine from the ArrayList source (or elsewhere), which method will be accessible? What are the rules, that govern this selection process?
* Why are the error messages different for case one and three?