Расскажите что есть сабж?
обственно решарпер предложил рефакторинг (
Convert to method group) которому я очень удивлся:
void UpdateItem(Item item) {}
IEnumerable<Item> items = ...
// было
items.ForEach(x => UpdateItem(item));
// стало
items.ForEach(UpdateItem);
Здравствуйте, Аноним, Вы писали:
А>Расскажите что есть сабж?
7.1 Expression classifications
....
A method group, which is a set of overloaded methods resulting from a member lookup.
Группа методов — множество перегруженных методов, возникшее как результат member lookup, то есть поиска членов типа с указанным именем. Группа методов почти всегда в дальнейшем подвергается overload resolution, который выбирает из нее единственный метод.
Здравствуйте, Аноним, Вы писали:
А>Расскажите что есть сабж?
using System;
class A
{
void Foo() { }
void Foo(int x) { }
void Bar()
{
this.Foo();
(this.Foo)();
Action f = this.Foo;
bool y = this.Foo is int;
}
}
В каждой строке this.Foo — это method group, состоящая из 2 методов. В первых трех случаях выполняется overload resolution, который выбирает один метод. В последнем случае overload resolution не выполняется, так как использование method group в операторе is всегда дает false.
А решарпер просто предлагает сократить запись, уменьшая уровень косвенности. Дело в том, что method group привести к типу делегата с подходящей сигнатурой, что соответсвует созданию делегата к методу в этой группе, выбранному overload resolution.