“OverloadResolutionBasic” (Solution)
Answer
params object[]
params object[]
params T[]
params T[]
object, objectExplanation
There are methods:
void Foo(object a)->objectvoid Foo(object a, object b)->object, objectvoid Foo(params object[] args)->params object[]void Foo<T>(params T[] args)->params T[]
Let's consider each call separately.
Foo()->params object[]
The object and object, object options is inaccessible because of number of arguments. The params T[] option is inaccessible because of the compiler can't resolve T. Thus, the right options is params object[].
Foo(null)->params object[]
The object, object option is inaccessible because of number of arguments. The params T[] options is inaccessible because of the compiler can't resolve T. The params object[] option is acceptable in its expanded and unexpanded forms. In this case, we should choose the expanded form, i.e. the method signature will look like Foo(object[] args). Now, we have the object and object[] options. The compiler will choose more specific option, i.e. object[] (or params object[]).
Foo(new Bar())->params T[]
The object, object option is inaccessible because of number of arguments. The object and params object[] options request an additional implicitly conversion: Bar to object. So, the params T[] (or params Bar[]) option is more preferable.
Foo(new Bar(), new Bar())->params T[]
The object option is inaccessible because of number of arguments. The object, object and params object[] options request an additional implicitly conversion: Bar to object. So, the params T[] (or params Bar[]) option is more preferable.
Foo(new Bar(), new object())->object, object
The object option is inaccessible because of number of arguments. There is exactly one option without the params keyword: object, object. It is more preferable.
Links
Last updated
Was this helpful?