C # 'da bir catch işleyicinin belirli bir koşul karşılandığında çalıştırılmasına izin veren bu yeni özelliğe rastladım.
int i = 0;
try
{
throw new ArgumentNullException(nameof(i));
}
catch (ArgumentNullException e)
when (i == 1)
{
Console.WriteLine("Caught Argument Null Exception");
}
Bunun ne zaman yararlı olabileceğini anlamaya çalışıyorum.
Bir senaryo şuna benzer bir şey olabilir:
try
{
DatabaseUpdate()
}
catch (SQLException e)
when (driver == "MySQL")
{
//MySQL specific error handling and wrapping up the exception
}
catch (SQLException e)
when (driver == "Oracle")
{
//Oracle specific error handling and wrapping up of exception
}
..
ancak bu yine aynı işleyici içinde yapabileceğim ve sürücünün türüne bağlı olarak farklı yöntemlere delege edebileceğim bir şey. Bu, kodun anlaşılmasını kolaylaştırır mı? Muhtemelen hayır.
Aklıma gelen başka bir senaryo da şöyle bir şey:
try
{
SomeOperation();
}
catch(SomeException e)
when (Condition == true)
{
//some specific error handling that this layer can handle
}
catch (Exception e) //catchall
{
throw;
}
Yine bu benim beğenebileceğim bir şey:
try
{
SomeOperation();
}
catch(SomeException e)
{
if (condition == true)
{
//some specific error handling that this layer can handle
}
else
throw;
}
'Yakala, ne zaman' özelliğini kullanmak, istisna işlemeyi daha hızlı hale getirir, çünkü işleyici bu şekilde atlanır ve yığın çözülme, işleyicideki belirli kullanım durumlarının işlenmesine kıyasla çok daha erken olabilir mi? Bu özelliğe daha iyi uyan, insanların daha sonra iyi bir uygulama olarak benimseyebilecekleri belirli kullanım örnekleri var mı?
when
İstisnanın kendisine erişmesi gerekiyorsa kullanışlıdır