два возможных решения:
Не типизированного:
public void WorkWith<T>(Action<T> method)
{
method.Invoke((T)(object)this);
}
Это не типизированного, потому что вы можете передать его любой метод, который имеет один параметр и нет возврата стоимость, например:
WorkWith((string x) => Console.WriteLine(x));
типизированного «версия» (с помощью общих ограничений):
public class MyClass
{
public void WorkWith<T>(Action<T> method) where T : MyClass
{
method.Invoke((T)this);
}
}
Дело в том, что, чтобы быть в состоянии бросить this
в T
, компилятор хочет быть уверен, что this
всегда литьевой к T
(поэтому необходимость для ограничения). Как показано в примере небезопасного типа, «классическое» (небезопасное) решение, используемое с дженериками, проходит через литье до object
.
Даже если у пользователя ниже, возможно, был неправильный ответ, это было неоднозначно, поэтому я его отредактировал и принял. Этот ответ также очень хорош, потому что он не был двусмысленным и показывает результат в контексте с объяснением. Я хотел бы принять оба, но хорошо. – KthProg
поддерживает и заслуживает того, чтобы быть принятым ответом по сравнению с ответом, который изначально был неправильным и не содержит объяснений ... –
@ Selman22 Мне плохо для оригинального плаката, но я должен согласиться. Изменено. – KthProg