【问题标题】:check event argument in event handler c#检查事件处理程序c#中的事件参数
【发布时间】:2021-03-17 08:16:48
【问题描述】:

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

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; }
    }
}

请参阅&lt;TagArgumentValue&gt;。这是在订阅的事件本身中传递的,所以我想知道如何访问它。类似于value.&lt;TagArgumentValue&gt;,表示传递给事件的参数值。

这可能吗?怎么样?

【问题讨论】:

    标签: c# events eventhandler


    【解决方案1】:

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

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

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

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

    您可能会使用Dictionary&lt;Tags, Action&lt;Tags&gt;&gt; 来跟踪为任何给定标签订阅的处理程序。

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

    【讨论】:

    • 正如你所说。关于名称,可能不是因为Tags 是枚举类型,所以传入的是来自可能的Tags 的标签值。不过我得考虑一下。非常感谢:)
    • @rustyBucketBay:如果每个值都是单个标签,则应将其命名为Tag。如果单个值是可能的多个标签的按位组合,则 Tags 是合适的,它应该有一个 [Flags] 属性应用于它 - 但这会使这里的逻辑更加复杂。
    • 我同意,我不觉得它有误导性,因为我习惯了我的代码,但它是:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 2012-04-13
    相关资源
    最近更新 更多