I have often encountered an error such as "cannot convert from 'method group' to 'string'" in cases like:
var list = new List<string>();
// ... snip
list.Add(someObject.ToString);
of course there was a typo in the last line because I forgot the invocation parentheses after ToString
. The correct form would be:
var list = new List<string>();
// ... snip
list.Add(someObject.ToString()); // <- notice the parentheses
However I came to wonder what is a method group. Google isn't much of a help nor MSDN.
This question is related to
c#
.net
method-group
The ToString
function has many overloads - the method group would be the group consisting of all the different overloads for that function.
Also, if you are using LINQ, you can apparently do something like myList.Select(methodGroup)
.
So, for example, I have:
private string DoSomethingToMyString(string input)
{
// blah
}
Instead of explicitly stating the variable to be used like this:
public List<string> GetStringStuff()
{
return something.getStringsFromSomewhere.Select(str => DoSomethingToMyString(str));
}
I can just omit the name of the var:
public List<string> GetStringStuff()
{
return something.getStringsFromSomewhere.Select(DoSomethingToMyString);
}
You can cast a method group into a delegate.
The delegate signature selects 1 method out of the group.
This example picks the ToString()
overload which takes a string parameter:
Func<string,string> fn = 123.ToString;
Console.WriteLine(fn("00000000"));
This example picks the ToString()
overload which takes no parameters:
Func<string> fn = 123.ToString;
Console.WriteLine(fn());
The first result in your MSDN search said:
The method group identifies the one method to invoke or the set of overloaded methods from which to choose a specific method to invoke
my understanding is that basically because when you just write someInteger.ToString
, it may refer to:
Int32.ToString(IFormatProvider)
or it can refer to:
Int32.ToString()
so it is called a method group.
Source: Stackoverflow.com