C#编译器功能还是我失去理智?
-
29-09-2019 - |
题
在重写事件调用功能以一般处理事件及其参数之后,我开始浏览代码(匹配更改),我注意到编译器隐含地进行了通用调用。
这是我的功能:
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
从第二个参数。
但是如果不能推断 全部 键入参数,您需要指定所有参数,即使是编译器可以推断的参数。
其他提示
它是呼叫类型推理,请阅读 这里, ,搜索“类型推理”一章
正如您所说,编译器已从第二个论点推断出类型。
不隶属于 StackOverflow