函数模板编译时二义性问题
有个函数模板,和一个普通的重载函数,编译时出现如下错误:
The call is ambiguous between the following methods or properties:
'Extensions.EventHandlerExtension.SafeRaise<Tasks.EventArguments.SpUpEvtArgs>(System.EventHandler<Tasks.EventArguments.SpUpEvtArgs>, object, Tasks.EventArguments.SpUpEvtArgs)'
and
'Extensions.EventHandlerExtension.SafeRaise<Tasks.EventArguments.SpUpEvtArgs>(System.EventHandler<Tasks.EventArguments.SpUpEvtArgs>, object, Tasks.EventArguments.SpUpEvtArgs)'
函数模板类:
using System;
namespace Extensions
{
public static class EventHandlerExtension
{
public static void SafeRaise<T>(this EventHandler<T> evt, object sender, T e) where T: EventArgs
{
EventHandler<T> eventHandler = evt;
if (eventHandler != null)
{
eventHandler(sender, e);
}
}
public static void SafeRaise(this EventHandler evt, object sender, EventArgs e)
{
EventHandler eventHandler = evt;
if (eventHandler != null)
{
eventHandler(sender, e);
}
}
}
}
调用该函数的地方:
namespace Tasks
{
public abstract class Task
{
public event EventHandler<SpUpEvtArgs> SpUp;
protected void RaiseSpUpEvt(int speed, string unit)
{
SpUp.SafeRaise(this, new SpUpEvtArgs(this, speed, unit)); //这行,报上述错误
}
}
}
哪位帮忙看看为什么就编译出错呢?实在是想不通.
网上搜索了,有的说是定义了两遍,但是grep了整个工程也就只有这两个函数定义。
------解决方案--------------------关了VS,删除bin obj文件夹,打开,重新编译。
另外再耐心找找,你引用的库中有没有重命的。
------解决方案--------------------光这几个代码看不出,第一段编译是没问题的
The call is ambiguous between the following methods or properties:
看似方法和属性冲突