作为成员的Action委托不编译

79E*_*796 0 c# esb

为什么这段代码不能编译:

public class FakeESBSingleMessage<T> : IBusEnabledClass
{
    private Action<T> SubscribedAction { get; set; }

    #region IBusEnabledClass

    public void Publish<T>(T message)
    {
        SubscribedAction(message);
    }

    public void Subscribe<T>(string ID, Action<T> action)
    {
        SubscribedAction = action;
    }

    #endregion
}
Run Code Online (Sandbox Code Playgroud)

它给出了以下错误:

错误37参数1:无法从'T [..FakeESBSingleMessage.cs(8)]'转换为'T'..FakeESBSingleMessage.cs 16 30
错误39无法将类型'System.Action [mscorlib.dll]'隐式转换为' System.Action [mscorlib.dll]'..FakeESBSingleMessage.cs 21 32
错误36委托'System.Action'有一些无效的参数..\FakeESBSingleMessage.cs 16 13

我正在尝试创建一个假的ESB组件进行测试,它保存了在Subscribe上传递的委托,并在调用发布时调用它.

Chr*_*ain 6

您收到编译错误,因为您的发布和订阅消息定义了一个新的类型参数T,而不是使用类中定义的参数.试试这个:

public class FakeESBSingleMessage<T> : IBusEnabledClass
{
    private Action<T> SubscribedAction { get; set; }

    #region IBusEnabledClass

    public void Publish(T message)
    {
        SubscribedAction(message);
    }

    public void Subscribe(string ID, Action<T> action)
    {
        SubscribedAction = action;
    }

    #endregion
}
Run Code Online (Sandbox Code Playgroud)