检查事件处理程序中的事件参数 c#

问题描述

我想跟踪在事件订阅中传入参数的参数,以便在选择/缩小我的调用之后。

public List<Tags> _toSpecificTagSubscribed = new List<Tags>();
private event Action<Tags> _onSpecificTagEvent;
public event Action<Tags> OnSpecificTagEvent {
    add { 
        _onSpecificTagCollision += value; 
        if (!_toSpecificTagSubscribed.Contains(<TagArgumentValue>))
            _toSpecificTagSubscribed.Add(<TagArgumentValue>); 
        }
        remove { _onSpecificTagEvent -= value; }
    }
}

参见<TagArgumentValue>。这是在订阅的事件本身中传递的,所以我想知道如何访问它。可能是 value.<TagArgumentValue>,表示传递给事件的参数值。

这可能吗?怎么样?

解决方法

如果我理解正确,您会将“引发事件时提供的信息”与“事件处理程序中提供的信息”混淆。

Action<Tags> 可以使用它提供的 Tags 做任何事情。它可能选择只响应某些标签,但这只是任意代码。

如果您想拥有一种仅订阅特定标签的方式,您需要将其作为订阅信息的一部分,例如

public void AddTagHandler(Tags tag,Action<Tags> handler)

您可以潜在地使用 Dictionary<Tags,Action<Tags>> 来跟踪为任何给定标记订阅的处理程序。

(您可能还想检查 Tags 是否是该类型的正确名称 - 它看起来应该代表单个标签而不是标签集合,考虑到您的方式正在使用它。)