函数模板编译时二义性问题
有个函数模板,和一个普通的重载函数,编译时出现如下错误:
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: 
看似方法和属性冲突