Я полностью согласен с тем, что это, по сути, повторение вопроса Обнаружение пользовательского исключения в c# Этот вопрос закрыт, поэтому я надеюсь перефразировать его, поскольку у меня такая же проблема.
У меня есть класс, который можно резюмировать таким образом ..
[Serializable()]
public class DataFile : ISerializable
{
public DataFile()
{
// Data structures
}
public DataFile(SerializationInfo info, StreamingContext ctxt) : this()
{
if(true)
{
throw new VersionNotFoundException();
}
// Load data
}
public void GetObjectData(SerializationInfo info, StreamingContext ctxt)
{
// Save data
}
}
В моей MainForm у меня есть метод, который содержит код, эквивалентный ..
private DataFile Data;
private string CurrentFile = "C:\myfile.xyz";
private void LoadData()
{
try
{
using (Stream stream = File.Open(CurrentFile, FileMode.Open))
Data = (DataFile)new BinaryFormatter().Deserialize(stream);
}
catch (VersionNotFoundException e)
{
// never gets here
}
catch (Exception e)
{
// VersionNotFoundException gets caught here as an inner exception
}
}
Мой вопрос ( s)
Почему VersionNotFoundException не попадает в раздел «catch (VersionNotFoundException e)» (разве я не добавил его в верхнюю часть стека исключений)? Что я делаю не так и как это исправить? Почему / как я делаю «внутреннее» исключение и как его остановить?