首页 > 解决方案 > 在 C# 中使用 Func<> 传递类自己的方法

问题描述

我在 Unity 引擎中做一个项目,在 C# 类中有 3 个函数,它们的结构如下:

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()

我省略了大部分功能,因为它实际上只是向量操作,与问题无关。

标签: c#unity3dfunc

解决方案


这个?

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;
}

推荐阅读