Tag: 方法组

重载的方法组参数会混淆重载parsing吗?

以下调用重载的Enumerable.Select方法: var itemOnlyOneTuples = "test".Select<char, Tuple<char>>(Tuple.Create); 失败,带有模糊性错误(清除命名空间): The call is ambiguous between the following methods or properties: 'Enumerable.Select<char,Tuple<char>> (IEnumerable<char>,Func<char,Tuple<char>>)' and 'Enumerable.Select<char,Tuple<char>> (IEnumerable<char>, Func<char,int,Tuple<char>>)' 我当然可以理解,为什么不明确指定types参数会导致模糊(两个重载都将适用),但是我没有看到这样做。 对我来说看起来很清楚,意图是调用第一个重载,方法组参数parsing为Tuple.Create<char>(char) 。 第二个重载不应该适用,因为没有一个Tuple.Create重载可以转换为预期的Func<char,int,Tuple<char>>types。 我猜编译器被Tuple.Create<char, int>(char, int)所困惑,但是它的返回types是错误的:它返回一个二元组,因此不能转换成相关的Functypes。 顺便说一句,下面的任何一个让编译器都很高兴: 为方法组参数指定一个types参数: Tuple.Create<char> (也许这实际上是一个types推断问题?)。 使参数成为lambdaexpression式而不是方法组: x => Tuple.Create(x) 。 (在Select呼叫中可以很好地进行types推断)。 不出所料,试图以这种方式调用Select的另一个重载也失败了: var itemIndexTwoTuples = "test".Select<char, Tuple<char, int>>(Tuple.Create); 这里有什么确切的问题?

什么是C#中的方法组?

我经常遇到如下错误:“无法从'方法组'转换为'string'”,例如: var list = new List<string>(); // … snip list.Add(someObject.ToString); 当然在最后一行有一个错字,因为我在ToString后面忘了调用括号。 正确的forms是: var list = new List<string>(); // … snip list.Add(someObject.ToString()); // <- notice the parentheses 但是我开始想知道什么是方法组。 谷歌没有太多的帮助,也没有MSDN 。