我可以在函数内部声明函数指针吗?
作者:互联网
我对声明函数指针的C#方法感到困惑.我想在函数内声明一行函数指针变量,而不必添加类成员或类似的东西.
我正在尝试的是:
System.Func<KeyCode, bool> inputCheck = activeCharacter.continuous_fire ? Input.GetKey : Input.GetKeyDown;
我尝试过也使用Action(但显然它不返回值)和委托,但显然我弄错了.
我可以以某种方式做到这一点(即我只是弄错了语法),还是做到这一点的唯一方法是首先声明一个委托原型?
编辑:澄清一下,目前我必须这样做:
bool do_fire=false;
if (activeCharacter.continuous_fire)
{
if (Input.GetKey( Fire ))
{
do_fire=true;
}
}
else
{
if (Input.GetKeyDown( Fire ))
{
do_fire=true;
}
}
由于这看起来很糟糕和多余(而且冗余几乎总是错误的),所以我只想将Input.*函数放在变量中并进行检查.
伪代码:
bool do_fire=false;
function keyCheck = activeCharacter.continuous_fire ? Input.GetKey : Input.GetKeyDown;
if (keyCheck( Fire ))
{
do_fire=true;
}
解决方法:
您的代码原则上可以工作,条件运算符只是无法确定“方法组”和“方法组”之间的通用类型.这样做的原因是这些方法可能会重载(即使您不使用这种方法),因此可以具有多个签名.
您可以通过将任一参数显式转换为目标委托类型来解决此问题:
Func<KeyCode, bool> checkFire = activeCharacter.continuous_fire ?
(Func<KeyCode, bool>)Input.GetKey : Input.GetKeyDown;
此外,即使您已经引入了inputCheck,测试代码也不必要地复杂.如果没有的话.直接分配do_fire:
bool do_fire = checkFire(Fire);
补充说明:您的编码约定是混乱的混合,您应该清理掉它. C#通常将PascalCase用于面向公众的标识符和所有类型,其余部分则使用camelCase. snake_case从未使用过.
换句话说,应该是:
> activeCharacter.ContinuousFire
> doFire
>火
标签:function-pointers,c 来源: https://codeday.me/bug/20191122/2060404.html