мой вопрос похож на Используя отражение, сеттер генерирует исключение, которое не может быть поймано , но рекомендуемое решение не решает мою проблему.
В приведенном ниже коде я пытаюсь установить свойство класса двумя различными способами: первым, прямым и вторым, через отражение. Сеттер генерирует исключение (в реальном случае, только если данное значение недопустимо), которое должно быть перехвачено в том месте, где вызывается сеттер. Но исключение поймано только в первом варианте; во втором блоке catch никогда не выполняется. В чем причина этого?
В моем случае я хочу использовать вариант отражения, но программа всегда завершает работу, когда выбрасывается исключение, и у меня нет изменений, чтобы его перехватить.
Упомянутый выше поток рекомендует, чтобы либо отладчик был настроен таким образом, чтобы он ломался при каждом исключении (это не может быть так, как в первом варианте, исключение ловится совершенно нормально), или что исключение происходит откуда-то еще. К сожалению, я не знаю, откуда это могло прийти.
Большое спасибо за вашу помощь!
using System;
using System.Reflection;
namespace ReflectionTestConsole
{
public class Program
{
public static void Main(string[] args)
{
Logic logic = new Logic();
try
{
logic.MyProperty = 5;
}
catch(Exception e)
{ // in this case, the exception is caught here.
Console.WriteLine("Exception was caught: " + e.Message);
}
try{
PropertyInfo propInfo = logic.GetType().GetProperty("MyProperty");
propInfo.SetValue(logic,5);
}
catch (Exception e)
{ // in this case, the exception is not caught
Console.WriteLine(e.Message);
}
}
}
public class Logic
{
private double variable;
public double MyProperty
{
get
{
return variable;
}
set
{ //Check if value is valid and if not throw an exception
throw new Exception("This is the exception");
}
}
}
}