c# - 在 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()
我省略了大部分功能,因为它实际上只是向量操作,与问题无关。
解决方案
这个?
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;
}
推荐阅读
- generics - 希望创建一个通用方法
- java - Firebase:获取订阅主题的用户列表
- git - 如何在 gitk 中显示简短形式的提交哈希?
- http-post - 使用 HttpClient (.NET) 发布时获得 502 BadGateway 响应,但使用 Postman 时却没有
- angular - 使用 [(ngModel)] 仅更改引用对象,而不更改源
- intellij-idea - 用于合并短线的 Intellij 或 Clion 格式化程序
- javascript - 在 Django 中将参数传递给 websocket
- python - 关于函数递归函数中的关键字参数
- tooltip - 将工具提示添加到 zendesk home_page.hbs
- firebase - Flutter 本地通知插件显示功能不起作用