কেউই ExceptionDispatchInfo.Capture( ex ).Throw()কোনও সমভূমি এবং সমভূমির পার্থক্য ব্যাখ্যা করতে throwপারেনি, সুতরাং এটি এখানে।
ধরা পড়া ব্যতিক্রমটি পুনর্বিবেচনার পুরো উপায়টি হ'ল ExceptionDispatchInfo.Capture( ex ).Throw()(কেবলমাত্র নেট .৪.৪ থেকে পাওয়া যায়)।
নীচে এটি পরীক্ষা করার জন্য প্রয়োজনীয় কেসগুলি রয়েছে:
1।
void CallingMethod()
{
//try
{
throw new Exception( "TEST" );
}
//catch
{
// throw;
}
}
2।
void CallingMethod()
{
try
{
throw new Exception( "TEST" );
}
catch( Exception ex )
{
ExceptionDispatchInfo.Capture( ex ).Throw();
throw; // So the compiler doesn't complain about methods which don't either return or throw.
}
}
3।
void CallingMethod()
{
try
{
throw new Exception( "TEST" );
}
catch
{
throw;
}
}
4।
void CallingMethod()
{
try
{
throw new Exception( "TEST" );
}
catch( Exception ex )
{
throw new Exception( "RETHROW", ex );
}
}
কেস 1 এবং কেস 2 আপনাকে একটি স্ট্যাক ট্রেস দেবে যেখানে CallingMethodপদ্ধতির সোর্স কোড লাইন নম্বরটি লাইনের লাইন নম্বর throw new Exception( "TEST" )।
তবে কেস 3 আপনাকে স্ট্যাক ট্রেস দেবে যেখানে CallingMethodপদ্ধতির সোর্স কোড লাইন নম্বরটি throwকলটির লাইন নম্বর । এর অর্থ throw new Exception( "TEST" )হ'ল লাইনটি যদি অন্য ক্রিয়াকলাপ দ্বারা ঘিরে থাকে তবে কোন লাইন নম্বরটিতে ব্যতিক্রমটি আসলে নিক্ষেপ করা হয়েছিল তা আপনার কোনও ধারণা নেই।
কেস 4 কেস 2 এর সাথে সমান কারণ মূল ব্যতিক্রমের লাইন নম্বরটি সংরক্ষণ করা হলেও এটি সত্যিকারের পুনর্নবী নয় কারণ এটি আসল ব্যতিক্রমের ধরণের পরিবর্তন করে।