C# 在接口中声明事件时的代码分析警告

C# 在接口中声明事件时的代码分析警告,c#,visual-studio-2013,code-analysis,C#,Visual Studio 2013,Code Analysis,为什么以下接口中的事件声明会在代码分析器中使用CA1009进行抱怨?在实现中,它确实似乎遵循了事件声明的标准约定 using System; namespace Client.Wpf.Utilities.MessageSubscription { public interface ITrigger<TMessageType> { event EventHandler<TMessageType> Fire; } } CA1009正

为什么以下接口中的事件声明会在代码分析器中使用CA1009进行抱怨?在实现中,它确实似乎遵循了事件声明的标准约定

using System;

namespace Client.Wpf.Utilities.MessageSubscription
{
    public interface ITrigger<TMessageType>
    {
        event EventHandler<TMessageType> Fire;
    }
}
CA1009正确声明事件处理程序

将“EventHandler”的第二个参数声明为EventArgs或扩展EventArgs的类型的实例,名为“e”

ITrigger.cs 7

以及实施:

using System;
//using GalaSoft.MvvmLight.Messaging;

namespace Client.Wpf.Utilities.MessageSubscription
{
    public class MvvmMessageTrigger<TMessageType> : ITrigger<TMessageType>
    {
        public MvvmMessageTrigger()
        {
            //Messenger.Default.Register<TMessageType>(this, InvokeSubscribers);
        }

        public event EventHandler<TMessageType> Fire;

        private void InvokeSubscribers(TMessageType messageType)
        {
            if (null != Fire)
            {
                Fire(this, messageType);
            }
        }
    }
}

错误是不言而喻的:

将“EventHandler”的第二个参数声明为EventArgs或扩展EventArgs的类型的实例,名为“e”


在我上面的示例中,TMessageType不是从EventArgs继承的,因此出现警告。

TMessageType的声明是什么?在这两个地方,它只是一个普通的旧类,没有什么特别之处。public类{public string SomeProperty{get;set;}}},所以它不是像所有.NET事件数据参数一样从EventArgs派生的?这就是消息所抱怨的。如果愿意,可以忽略它,它只会混淆程序员将要为事件编写事件处理程序的内容。这可能会有所帮助@汉斯帕桑:是的,就是这样,请把答案贴出来。但仍然没有改变它: