How does ConvertAll <Guid> (Guid.Parse) work?
At first I had such a line
List<Guid> ratingComparisonIds = ratingComparison.ConvertAll<Guid>(o => Guid.Parse(o));
Then ReSharper gave me a hint that I can convert it to a group of methods. The result of this operation is
List<Guid> ratingComparisonIds = ratingComparison.ConvertAll<Guid>(Guid.Parse);
I got confused in the syntax .. how and why does it work? I mean, there are no parameters for the parse method. Magic, I would say.
Update
Even more compact conversion
List<Guid> ratingComparisonIds = ratingComparison.ConvertAll(Guid.Parse);
+3
2 answers
It uses group method conversion. He does something like this:
// Very long-winded C# 1 syntax
Converter<String, Guid> converter = new Converter<String, Guid>(Guid.Parse);
List<Guid> ratingComparisonIds = ratingComparison.ConvertAll(converter);
// Simpler C# 2 syntax
Converter<String, Guid> converter = Guid.Parse;
List<Guid> ratingComparisonIds = ratingComparison.ConvertAll(converter);
Now insert the variable and you will get the source code. Does that mean clearer?
+3
ConvertAll ( ) Converter<string,Guid> - , string a Guid. Guid.Parse - , new Converter<string,Guid>(Guid.Parse) :
Converter<string,Guid> conv = Guid.Parse; // perfectly valid
List<Guid> ratingComparisonIds = ratingComparison.ConvertAll<Guid>(conv);
- :
static Guid <>____blah(string o) { return Guid.Parse(o); }
Guid.Parse .
+3