C#中的方法组是什么?

时间:2009-05-20 08:31:24

标签: c# .net method-group

在以下情况下,我经常遇到错误,例如“无法从'方法组'转换为'字符串'”

var list = new List<string>();
// ... snip
list.Add(someObject.ToString);

当然最后一行有一个拼写错误,因为我忘记了ToString之后的调用括号。正确的形式是:

var list = new List<string>();
// ... snip
list.Add(someObject.ToString()); // <- notice the parentheses

然而,我开始想知道什么是方法组。 Google并不是一种帮助,也不是MSDN

5 个答案:

答案 0 :(得分:302)

方法组是方法集的名称(可能只是一个) - 即理论上ToString方法可能有多个重载(加上任何扩展方法): ToString()ToString(string format)等 - 因此ToString本身就是一个“方法组”。

它通常可以通过使用重载解析将方法组转换为(类型化)委托 - 但不能转换为字符串等;它没有意义。

再次添加括号后;重载决策启动后,您已明确识别出方法调用。

答案 1 :(得分:150)

此外,如果您使用LINQ,您显然可以执行myList.Select(methodGroup)

之类的操作

所以,例如,我有:

private string DoSomethingToMyString(string input)
{
    // blah
}

而不是像这样明确说明要使用的变量:

public List<string> GetStringStuff()
{
    return something.getStringsFromSomewhere.Select(str => DoSomethingToMyString(str));
}

我可以省略var的名称:

public List<string> GetStringStuff()
{
    return something.getStringsFromSomewhere.Select(DoSomethingToMyString);
}

答案 2 :(得分:20)

您可以将方法组转换为委托。

委托签名从组中选择1个方法。

此示例选择带有字符串参数的ToString()重载:

Func<string,string> fn = 123.ToString;
Console.WriteLine(fn("00000000"));

此示例选择不带参数的ToString()重载:

Func<string> fn = 123.ToString;
Console.WriteLine(fn());

答案 3 :(得分:18)

MSDN搜索的第一个结果是:

  

方法组识别出一个   调用方法或集合   重载的方法   选择一个特定的方法来调用

我的理解是,基本上因为当你写someInteger.ToString时,它可能会引用:

Int32.ToString(IFormatProvider) 

或者可以参考:

Int32.ToString()

所以它被称为方法组。

答案 4 :(得分:17)

ToString函数有很多重载 - 方法组是由该函数的所有不同重载组成的组。