在重写事件调用功能以一般处理事件及其参数之后,我开始浏览代码(匹配更改),我注意到编译器隐含地进行了通用调用。

这是我的功能:

private void InvokeEvent<TArgs>(EventHandler<TArgs> invokedevent, TArgs args) 
    where TArgs : EventArgs
    {
        EventHandler<TArgs> temp = invokedevent;
        if (temp != null)
        {
            temp(this, args);
        }
    }

这是调用该函数的行:

InvokeEvent(AfterInteraction, result);

这是没有问题的编译,Intellisense甚至显示“正确”调用(带有零件)。

这是一项编译器功能(实际上可以从第二个参数中直接推断出通用类型),还是我什么都不疯狂而错过了这一点?

有帮助吗?

解决方案

如果编译器可以推断所有类型的参数,则无需明确指定它们。在这种情况下,它可以推断 TArgs 从第二个参数。

但是如果不能推断 全部 键入参数,您需要指定所有参数,即使是编译器可以推断的参数。

其他提示

它是呼叫类型推理,请阅读 这里, ,搜索“类型推理”一章

正如您所说,编译器已从第二个论点推断出类型。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top