Передача собственного метода класса с использованием Fun c <> в C# - PullRequest
0 голосов
/ 11 февраля 2020

Я делаю проект в движке Unity и имею 3 функции в классе C#, которые структурированы следующим образом:

public Vector3 FunctionOne(Vector3 point) 
{
    // do some vector operations and return it as var a
    return a;
}

public Vector3 Sample(System.Func<Vector3, Vector3> funcOne, Vector3 samplePoint)
{
    // sample the resulting vector field from funcOne and return as var b
    return b;
}

public Vector3 Trace(Vector3 point)
{
    // Even more vector operations, as follows
    Vector3 k1 = Sample(FunctionOne(point), point);
    // (...)
    return k1;
}

В основном мне нужна функция Trace() для вызова Функция Sample() для некоторой переменной, но также требуется, чтобы функция Sample() принимала различные функции в качестве переменной, например, FunctionOne(). Я получаю следующую ошибку внутри Trace(), когда делаю это, как указано выше:

Argument 1: cannot convert from 'UnityEngine.Vector3' to 'System.Func<UnityEngine.Vector3, UnityEngine.Vector3>'

Как бы я справился с этим правильно? Насколько я вижу, функция Sample() принимает и возвращает Vector3, я также указываю, какую функцию он должен принимать, так почему же это не работает? Нужно ли также передавать FunctionOne() в Trace(), даже если он находится в одном классе?

Я пропустил большую часть функций, поскольку на самом деле это просто векторные операции и они не имеют отношения к вопрос.

1 Ответ

1 голос
/ 12 февраля 2020

Это?

public Vector3 Sample(System.Func<Vector3, Vector3> funcOne, Vector3 samplePoint)
{
    var b = funcOne(samplePoint);
    return b;
}

public Vector3 Trace(Vector3 point)
{
    // Even more vector operations, as follows
    Vector3 k1 = Sample(FunctionOne, point);
    // (...)
    return k1;
}
...