其他分享
首页 > 其他分享> > 我可以在函数内部声明函数指针吗?

我可以在函数内部声明函数指针吗?

作者:互联网

我对声明函数指针的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