2016-03-17 1 views
0

Есть ли способ перехватить вызов метода, найти условие и пропустить выполнение? Метод ничего не возвращает, и я хотел бы считать его успешно завершенным и продолжить выполнение с остальной частью стека.Как перехватить, пропустить выполнение метода и продолжить с остальной частью стека

public IMessageSink NextSink { 
    get { return m_next; } 
} 

public IMessage SyncProcessMessage(IMessage msg) { 
    if (//some condition is met) { 
     // should skip the method execution 
    } else { 
     IMessage returnMethod = m_next.SyncProcessMessage(msg); 
     return returnMethod; 
    } 
} 
+0

просто возвращает ничего 'возвращение;' – Jacobr365

+0

FYI, если ваше состояние случается проверка, если 'm_next == null', как кажется вероятным, тогда вы делаете это в одной строке на C# 6:' return m_next? .SyncProcessMessage (msg); ' –

ответ

1

Заявление return завершает выполнение метода. В этом случае вы должны использовать return null потому SyncProcessMessage() должны вернуть значение IMessage

public IMessage SyncProcessMessage(IMessage msg) { 
    if (//some condition is met) { 
     return null; 
    } else { 
     IMessage returnMethod = m_next.SyncProcessMessage(msg); 
     return returnMethod; 
    } 
} 

или что-то подобное:

public IMessage SyncProcessMessage(IMessage msg) { 
    IMessage returnMethod = null; 
    if (! //not some condition is met) { 
     returnMethod = m_next.SyncProcessMessage(msg);    
    } 
    return returnMethod; 
} 
+0

return null - это исключение. exception: System.Runtime.Remoting.RemotingException: метод был вызван с сообщением о неожиданном типе. Результат StackTrace: \t на System.Runtime.Remoting.Proxies.RemotingProxy.CallProcessMessage (IMessageSink мс, Шеззаде reqMsg, ArrayWithSize proxySinks, Thread currentThread, Context currentContext, Boolean bSkippingContextChain) – Kiran

+0

@Kiran конечно, вы должны поймать его, пожалуйста, где вы вызываете 'SyncProcessMessage()' – Marusyk

Смежные вопросы