Как я могу использовать Fun c для метода с параметрами? - PullRequest
0 голосов
/ 27 января 2020

Я пытаюсь объявить 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 в моей структуре?

...