Search code examples
c#-4.0extension-methodsienumerablegeneric-programming

How Can a String Array Call Generic Select Method with <string,string>


I am new to Generic Classes and Generic Methods. I have a simple cpode:

Func<string, string> selector = str => str.ToUpper();
string[] words = { "orange", "apple", "Article", "elephant" };
IEnumerable<String> aWords = words.Select(selector);

When I look at Select method it says:

IEnumerable<String> IEnumerable<String>.Select<String, String>(Func<string,string> collector)

How does Select generic method knows that String,String types are coming? Does it implicitly come from "selector" delegate? I am really confused.

Thanks


Solution

  • The C# compiler infers the type arguments for Select so that you don't have to type them. It burns those types into the compiled assembly.

    Does it implicitly come from "selector" delegate?

    Exactly. C# has some type inference so that you have to type less.

    The Select method itself has no idea what piece of code called it. All it knows is that the type arguments are properly provided.