Я пытаюсь объявить Func<T, TResult>
для метода stati c в структуре, которая имеет in
параметров.
Подпись моего метода выглядит примерно так:
public static MyStruct MyMethod(in MyStruct input);
Я пытался объявить Func
следующим образом:
new Func<MyStruct, MyStruct>(MyStruct.MyMethod);
Но это вызывает ошибку:
"Нет перегрузки для делегата совпадений 'MyMethod' Func<MyStruct, MyStruct>
. "
Я немного погуглил и обнаружил в документации Microsoft следующую информацию:
Инкапсулированный метод должен соответствовать сигнатуре метода, определенной этот делегат. Это означает, что инкапсулированный метод должен иметь один параметр, который передается ему по значению, и что он должен возвращать значение. (https://docs.microsoft.com/en-us/dotnet/api/system.func-2?view=netcore-3.1)
Из моего кода я вижу, что это правда, поскольку у меня есть Func
, правильно работающие для методов в этой структуре с in
параметры, и у них есть другой аргумент, передаваемый по значению.
Итак, мой вопрос состоит из двух частей, во-первых, почему хотя бы один аргумент Func<>
должен быть передан по значению? А во-вторых, как мне получить Func<>
, который будет инкапсулировать метод stati c в моей структуре?