【发布时间】:2018-10-01 10:15:26
【问题描述】:
我有以下代码:
public void UnPublishDatabases(IReadOnlyCollection<IPublishedDatabase> sqlDatabases)
{
var listener = new UnpublishDatabaseListener();
listener.DatabaseUnpublished += db =>
{
OnDatabaseUnpublished(db);
listener.DatabaseUnpublished -= OnDatabaseUnpublished;
};
_publishController.Unpublish(sqlDatabases, listener);
//...
}
诊断处理器给了我以下警告:
Event 'listener.DatabaseUnpublished' should not be subscribed with the same 'listener.DatabaseUnpublished' object.
所以我试着理解这里出了什么问题。 并尝试找出如何更改代码。
可能它解决了警告:
public void UnPublishDatabases(IReadOnlyCollection<IPublishedDatabase> sqlDatabases)
{
var listener = new UnpublishDatabaseListener();
//save ref
var listenerCopy = listener;
listener.DatabaseUnpublished += db =>
{
OnDatabaseUnpublished(db);
//use it
listenerCopy.DatabaseUnpublished -= OnDatabaseUnpublished;
};
_publishController.Unpublish(sqlDatabases, listener);
//...
}
我还有一个问题 - 我真的需要在这里退订吗? 因为监听器只是一个本地对象。
更新:
public class UnpublishDatabaseListener
{
public event Action<IPublishedDatabase> DatabaseUnpublished;
//...
}
【问题讨论】:
-
那些是自定义类型吗?我不熟悉
-
是的。它们是自定义类型
-
我也对处理程序中的调用感到困惑。能否展示一下与此问题相关的
UnpublishDatabaseListener成员。 -
旁注:
var listenerCopy = listener;正如你所说的 copy,这是否意味着UnpublishDatabaseListener是一个结构? -
@Nkosi 我已经更新了我的代码
标签: c# .net events lambda anonymous-function