Хорошо, поэтому после прочтения создания делегатов пользовательских функций после Fun c <> не принял ключевое слово ref в объявлении типа , я получил этот делегат:
private delegate TResult RefFunc<T, out TResult>(ref T arg);
внутри моего маленького тестового проекта. Я также объявил эти две функции:
private static string FirstFunction(string arg) {
return "";
}
private static string SecondFunction(string arg) {
return "";
}
(Так как я обнаружил проблему, это действительно единственное содержимое функции!)
, которые придерживаются вышеуказанного делегата и передаются в качестве параметров этой функции:
private static void SampleFunction(RefFunc<String, String> argOne, RefFunc<String, String> argTwo) { ... }
Примерно так (упрощенно):
private static void Main(string[] args) {
SampleFunction(FirstFunction, SecondFunction);
}
Этот вызов функции не сработает, поскольку "Conversion of 'method group' to '<class>.RefFunc<string, string>' isn't possible
", что имеет смысл - я Я напрямую передаю функцию, не превращая ее сначала в делегата - хотя я почти уверен, что видел тот же синтаксис, где-то работающий с делегатом Action <> В любом случае, я затем изменил свой код вызывающего абонента в функции Main () разными способами, глядя на проблему, однако ни один из приведенных ниже подходов не решил эту проблему.
SampleFunction(new RefFunc<String, String>(FirstFunction), ...); // Causes "No overload for FirstFunction matches delegate RefFunc<string, string>" at the first function parameter
SampleFunction(RefFunc FirstFunction, ...); // Was worth a try
RefFunc handler = FirstFunction; SampleFunction(handler, ...); // As described in docs. Causes "The usage of type "RefFunc<T, TResult>" (generic) requires 2 type arguments" at keyword RefFunc
RefFunc<String, String> handler = FirstFunction; SampleFunction(handler, ...); // Didn't help it. Causes the same error as with the first attempt
// and a few others
Docs
Я наконец решил обратиться к stackoverflow. Поскольку мои функции четко соответствуют делегату, которого я создал, я не могу понять, почему C# считает, что они этого не делают. Я ценю любую помощь!
Обратите внимание, что, хотя я показываю только код, относящийся к вызванной ошибке, проект очень маленький, поэтому я уверен, что проблема не в ie в другом месте