Цикл C # для каждого события, внутреннего для объявления класса - PullRequest
3 голосов
/ 09 июня 2011

Я где-то видел такой код.

В идеале я хотел бы, чтобы такой цикл соответствовал этому типу события Func.

public static event Func<RecentDirectories, DirectoryInfo, Exception, bool> ContinueOnExceptionEvent;

/// <summary>
/// Determine if the loop should continue on a general exception not already handled
/// in the loop's catch statement.
/// </summary>
/// <param name="dir"></param>
/// <param name="e"></param>
/// <returns>True continues loop, false rethrows the exception</returns>
protected virtual bool TryContinueOnException(DirectoryInfo dir, Exception ex)
{
    if (!Aborted) // check if thread aborted before doing event
    {
        if (null != ContinueOnExceptionEvent)
        {
            // foreach line doesn't compile because 
            // ContinueOnExceptionEvent doesn't have a GetEnumerator()
            foreach (var e in ContinueOnExceptionEvent)
            {
                if (e(this, dir, ex))
                {
                    return true;
                }
            }
        }
    }

    return false;
}

Как мне получить foreach для получения всех событий и итерации по ним?

1 Ответ

2 голосов
/ 09 июня 2011

Вы можете получить доступ к каждому подписчику, позвонив по номеру GetInvocationList.

protected virtual bool TryContinueOnException(DirectoryInfo dir, Exception ex)
{
    if (!Aborted)
    {
        var e = ContinueOnExceptionEvent;
        if (e != null)
        {
            var ds = e.GetInvocationList();
            foreach (Func<RecentDirectories, DirectoryInfo, Exception, bool> d in ds)
            {
                if (d(this, dir, ex))
                    return true;
            }
        }
    }
    return false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...