And*_*nea 336 .net c# method-group
在以下情况下,我经常遇到一个错误,例如"无法从'方法组'转换为'字符串'"
var list = new List<string>();
// ... snip
list.Add(someObject.ToString);
Run Code Online (Sandbox Code Playgroud)
当然最后一行有一个拼写错误,因为我忘记了之后的调用括号ToString.正确的形式是:
var list = new List<string>();
// ... snip
list.Add(someObject.ToString()); // <- notice the parentheses
Run Code Online (Sandbox Code Playgroud)
Mar*_*ell 313
方法组是一个名称的一套方法(可能是只有一个) -即理论上的ToString方法可以有多个重载(加任何扩展方法)ToString(),ToString(string format)等-因此ToString本身是一个"方法组".
它通常可以通过使用重载解析将方法组转换为(类型化)委托 - 但不能转换为字符串等; 它没有意义.
再次添加括号后; 超载分辨率开始,您已明确地识别出方法调用.
小智 156
此外,如果您使用LINQ,您显然可以做类似的事情myList.Select(methodGroup).
所以,例如,我有:
private string DoSomethingToMyString(string input)
{
// blah
}
Run Code Online (Sandbox Code Playgroud)
而不是明确地声明要使用的变量,如下所示:
public List<string> GetStringStuff()
{
return something.getStringsFromSomewhere.Select(str => DoSomethingToMyString(str));
}
Run Code Online (Sandbox Code Playgroud)
我可以省略var的名称:
public List<string> GetStringStuff()
{
return something.getStringsFromSomewhere.Select(DoSomethingToMyString);
}
Run Code Online (Sandbox Code Playgroud)
Jac*_*ack 22
您可以将方法组强制转换为委托.
委托签名从组中选择1个方法.
此示例选择ToString()带有字符串参数的重载:
Func<string,string> fn = 123.ToString;
Console.WriteLine(fn("00000000"));
Run Code Online (Sandbox Code Playgroud)
此示例选择ToString()不带参数的重载:
Func<string> fn = 123.ToString;
Console.WriteLine(fn());
Run Code Online (Sandbox Code Playgroud)
osc*_*kuo 19
MSDN搜索的第一个结果是:
方法组标识要调用的一个方法或从中选择要调用的特定方法的重载方法集
我的理解是,基本上因为当你刚写的时候someInteger.ToString,它可能会引用:
Int32.ToString(IFormatProvider)
Run Code Online (Sandbox Code Playgroud)
或者它可以参考:
Int32.ToString()
Run Code Online (Sandbox Code Playgroud)
所以它被称为方法组.
180*_*ION 17
该ToString函数有许多重载 - 方法组将是由该函数的所有不同重载组成的组.
| 归档时间: |
|
| 查看次数: |
153238 次 |
| 最近记录: |