Kullanıcı tarafından filtrelenmiş özel durum işleyicilerini kullanma

Kullanıcı tarafından filtrelenmiş özel durum işleyicileri, özel durum için tanımladığınız gereksinimlere göre özel durumları yakalar ve işler. Bu işleyiciler deyimini catchwhen anahtar sözcüğüyle (Catch ve When Visual Basic'te) kullanır.

Bu teknik, belirli bir özel durum nesnesi birden çok hataya karşılık geldiğinde kullanışlıdır. Bu durumda, nesne genellikle hatayla ilişkili belirli hata kodunu içeren bir özelliğe sahiptir. İfadedeki hata kodu özelliğini kullanarak yalnızca bu catch yan tümcede işlemek istediğiniz hatayı seçebilirsiniz.

Aşağıdaki örnekte deyimi gösterilmektedir catch/when .

try
{
    //Try statements.  
}
catch (Exception ex) when (ex.Message.Contains("404"))
{
    //Catch statements.
}
Try  
    'Try statements.  
    Catch When Err = VBErr_ClassLoadException
    'Catch statements.
End Try  

Kullanıcı tarafından filtrelenen yan tümcesinin ifadesi hiçbir şekilde kısıtlanmaz. Kullanıcı tarafından filtrelenen ifadenin yürütülmesi sırasında bir özel durum oluşursa, bu özel durum atılır ve filtre ifadesinin false olarak değerlendirilmiş olduğu kabul edilir. Bu durumda, ortak dil çalışma zamanı geçerli özel durum için bir işleyici aramaya devam eder.

Belirli özel durumu ve kullanıcı tarafından filtrelenmiş yan tümceleri birleştirme

Deyimi catch hem belirli özel durumu hem de kullanıcı tarafından filtrelenen yan tümceleri içerebilir. Çalışma zamanı önce belirli bir özel durumu sınar. Özel durum başarılı olursa, çalışma zamanı kullanıcı filtresini yürütür. Genel filtre, sınıf filtresinde bildirilen değişkene başvuru içerebilir. İki filtre yan tümcesinin sırasının ters çevrilemeyeceğini unutmayın.

Aşağıdaki örnek, catch deyiminde belirli bir özel durumu ve when anahtar sözcüğünü kullanan kullanıcı tarafından filtrelenmiş yan tümcesini gösterir.

try
{
    //Try statements.  
}
catch (System.Net.Http.HttpRequestException ex) when (ex.Message.Contains("404"))
{
    //Catch statements.
}
Try  
    'Try statements.
    Catch cle As ClassLoadException When cle.IsRecoverable()  
    'Catch statements.
End Try  

Ayrıca bkz.