What is a method group in C#?

前端 未结 5 1999
夕颜
夕颜 2020-11-22 01:46

I have often encountered an error such as \"cannot convert from \'method group\' to \'string\'\" in cases like:

var list = new List();
// ...          


        
相关标签:
5条回答
  • 2020-11-22 01:59

    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);
    }
    
    0 讨论(0)
  • 2020-11-22 01:59

    The ToString function has many overloads - the method group would be the group consisting of all the different overloads for that function.

    0 讨论(0)
  • 2020-11-22 02:11

    A method group is the name for a set of methods (that might be just one) - i.e. in theory the ToString method may have multiple overloads (plus any extension methods): ToString(), ToString(string format), etc - hence ToString by itself is a "method group".

    It can usually convert a method group to a (typed) delegate by using overload resolution - but not to a string etc; it doesn't make sense.

    Once you add parentheses, again; overload resolution kicks in and you have unambiguously identified a method call.

    0 讨论(0)
  • 2020-11-22 02:14

    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());
    
    0 讨论(0)
  • 2020-11-22 02:14

    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.

    0 讨论(0)
提交回复
热议问题