C#编译器功能还是让我失去理智?

时间:2010-11-05 08:26:05

标签: c# generics implicit-typing

在重写我的事件调用函数以一般地处理事件及其参数之后,我开始检查我的代码(以匹配更改),并且我注意到编译器隐式地进行了泛型调用。

这是我的功能:

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);

这个编译没有问题,智能感知甚至显示“正确”的调用(带有部分)。

这是一个编译器功能(实际上,泛型类型可以直接从第二个参数推断出来),还是我疯了什么都没有,并且忽略了这一点?

3 个答案:

答案 0 :(得分:6)

如果编译器可以推断所有类型参数,那么您不需要显式指定它们。在这种情况下,它可以从第二个参数推断TArgs

但如果它无法推断所有类型参数,则需要指定所有这些参数,甚至是编译器可以推断出的参数。

答案 1 :(得分:3)

是呼叫类型推断,请阅读here,搜索“类型推断”一章

答案 2 :(得分:2)

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