C# 我可以在函数中声明函数指针吗?
我对声明函数指针的C#方法感到困惑。我想在函数中声明一行函数指针变量,而不必添加类成员或类似的东西 我尝试的是:C# 我可以在函数中声明函数指针吗?,c#,function-pointers,C#,Function Pointers,我对声明函数指针的C#方法感到困惑。我想在函数中声明一行函数指针变量,而不必添加类成员或类似的东西 我尝试的是: System.Func<KeyCode, bool> inputCheck = activeCharacter.continuous_fire ? Input.GetKey : Input.GetKeyDown; 由于这看起来很糟糕,而且是冗余的(冗余几乎总是错误的),我想把Input.*函数放在一个变量中,然后检查一下 伪代码: bool do_fire=fa
System.Func<KeyCode, bool> inputCheck = activeCharacter.continuous_fire ? Input.GetKey : Input.GetKeyDown;
由于这看起来很糟糕,而且是冗余的(冗余几乎总是错误的),我想把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;
另外一句话:您的编码约定是一个混乱的混合体,您应该对此进行清理。C#通常使用PascalCase
表示面向公众的标识符和所有类型,而camelCase
表示其余类型<代码>蛇壳从未使用过
换句话说,它应该是:
activeCharacter.ContinuousFire
doFire
火灾
Func inputCheck=(keyCode)=>…
编译器错误是什么?假设GetKey和GetKeyDown都是静态方法,并将keyCode作为参数并返回bool,然后继续\u fire返回布尔值,那份声明完全合法,真奇怪。。。尝试显式地将左侧操作数强制转换为func。谢谢,成功了!关于你指出的第二个问题,那是因为我可能在里面添加了更多的东西,而不仅仅是do\u fire
assignment。谢谢你也指出了这些混乱的惯例!:)
Func<KeyCode, bool> checkFire = activeCharacter.continuous_fire ?
(Func<KeyCode, bool>)Input.GetKey : Input.GetKeyDown;
bool do_fire = checkFire(Fire);