Передача метода, связанного с экземпляром, в список foreachC#

Место общения программистов C#
Ответить
Anonymous
 Передача метода, связанного с экземпляром, в список foreach

Сообщение Anonymous »

Сравните следующее использование ForEach для создания ограничивающей рамки из содержащихся точек (Unity, но это несущественно). Один работает, другой компилируется нормально, но не получается.
Хорошо — явная лямбда:

Код: Выделить всё

Bounds ret = new(center, Vector3.zero);
endPositions.ForEach(pos => ret.Encapsulate(pos)); // endPositions is List
return ret;
Плохо — передача группы методов (я думаю):

Код: Выделить всё

Bounds ret = new(center, Vector3.zero);
endPositions.ForEach(ret.Encapsulate);
return ret;
Я ожидаю, что второй будет делать то же самое, что и первый, поскольку он ссылается на метод экземпляра. Но он просто молча оставляет ret как есть. Единственное отличие, которое я вижу, заключается в том, что во второй форме параметр ForEach представляет собой группу методов, а не конкретную перегрузку.
Набор разрешения перегрузки следующий:

Код: Выделить всё

public void Encapsulate(Vector3 point);
public void Encapsulate(Bounds bounds);
Однако из определения List.ForEach(Action) я ожидаю, что только первый метод, принимающий Vector3, будет быть пригодным. Однако похоже, что вместо этого выбран второй (принимающий границы).
Моя единственная теория заключается в том, что это связано с тем, как и где это параметр привязан, но здесь я застрял. Что именно здесь происходит?

Подробнее здесь: https://stackoverflow.com/questions/784 ... st-foreach
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»