Пропуск выполнения действия с ошибкой для C#.

material

Client
Регистрация
23.03.2021
Сообщения
329
Благодарностей
124
Баллы
43
День добрый.

Цель прописать значения переменных через C#, используя данный код:
C#:
project.Variables["Variable1"].Value = "0";
project.Variables["Variable2"].Value = "0";
project.Variables["Variable3"].Value = "0";
project.Variables["Variable4"].Value = "0";
project.Variables["Variable5"].Value = "0";
В случае если переменной "Variable3" не существует в проекте, то код выполнится до строки с переменной "Variable3" и остановиться, что логично собственно.

Прошу помочь доработать код таким образом, чтобы он пропускал строки с ошибкой (где переменной не существует) и продолжал выполнение кода, то есть присваивал значения переменным "Variable4" и "Variable5", то есть до конца. По форуму искал, похожих тем и постов не нашел, возможно из-за простаты реализации.
 

viol2021

Client
Регистрация
12.01.2021
Сообщения
482
Благодарностей
180
Баллы
43
День добрый.

Цель прописать значения переменных через C#, используя данный код:
C#:
project.Variables["Variable1"].Value = "0";
project.Variables["Variable2"].Value = "0";
project.Variables["Variable3"].Value = "0";
project.Variables["Variable4"].Value = "0";
project.Variables["Variable5"].Value = "0";
В случае если переменной "Variable3" не существует в проекте, то код выполнится до строки с переменной "Variable3" и остановиться, что логично собственно.

Прошу помочь доработать код таким образом, чтобы он пропускал строки с ошибкой (где переменной не существует) и продолжал выполнение кода, то есть присваивал значения переменным "Variable4" и "Variable5", то есть до конца. По форуму искал, похожих тем и постов не нашел, возможно из-за простаты реализации.
try
{
Тут выполняется код
}
catch
{
Если есть ошибка идет сюда
}
 
  • Спасибо
Реакции: material

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 794
Благодарностей
2 466
Баллы
113
День добрый.

Цель прописать значения переменных через C#, используя данный код:
C#:
project.Variables["Variable1"].Value = "0";
project.Variables["Variable2"].Value = "0";
project.Variables["Variable3"].Value = "0";
project.Variables["Variable4"].Value = "0";
project.Variables["Variable5"].Value = "0";
В случае если переменной "Variable3" не существует в проекте, то код выполнится до строки с переменной "Variable3" и остановиться, что логично собственно.

Прошу помочь доработать код таким образом, чтобы он пропускал строки с ошибкой (где переменной не существует) и продолжал выполнение кода, то есть присваивал значения переменным "Variable4" и "Variable5", то есть до конца. По форуму искал, похожих тем и постов не нашел, возможно из-за простаты реализации.
Если дело именно в том, что код выходит по ошибке, если нет переменной - то первое что напрашивается, это прежде чем присваивать переменной какое-то значение - проверить существует ли эта переменная. Таким образом код никогда не выйдет по ошибке и продолжит работу. Пример:
C#:
if(project.Variables.Keys.Contains("Variable1")) project.Variables["Variable1"].Value = "0";
 
  • Спасибо
Реакции: material

material

Client
Регистрация
23.03.2021
Сообщения
329
Благодарностей
124
Баллы
43
try
{
Тут выполняется код
}
catch
{
Если есть ошибка идет сюда
}
Возможно что-то не так делаю, возможно ли показать конструкцию, именно на данном коде?
C#:
project.Variables["Variable1"].Value = "0";
project.Variables["Variable2"].Value = "0";
project.Variables["Variable3"].Value = "0";
project.Variables["Variable4"].Value = "0";
project.Variables["Variable5"].Value = "0";
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 794
Благодарностей
2 466
Баллы
113
Возможно что-то не так делаю, возможно ли показать конструкцию, именно на данном коде?
C#:
project.Variables["Variable1"].Value = "0";
project.Variables["Variable2"].Value = "0";
project.Variables["Variable3"].Value = "0";
project.Variables["Variable4"].Value = "0";
project.Variables["Variable5"].Value = "0";
Оденьте каждую строку по примеру.
Но, этот вариант хуже, чем вариант, который я описал в предыдущем сообщении.
C#:
try { project.Variables["Variable1"].Value = "0"; } catch{}
 
  • Спасибо
Реакции: material

viol2021

Client
Регистрация
12.01.2021
Сообщения
482
Благодарностей
180
Баллы
43
Возможно что-то не так делаю, возможно ли показать конструкцию, именно на данном коде?
C#:
project.Variables["Variable1"].Value = "0";
project.Variables["Variable2"].Value = "0";
project.Variables["Variable3"].Value = "0";
project.Variables["Variable4"].Value = "0";
project.Variables["Variable5"].Value = "0";
try
{
project.Variables["Variable1"].Value = "0";
}
catch
{
project.SendInfoToLog("Нет такой переменной");
}

Или как вам ответили выше, перед тем как присвоить, проверьте на существование
 
  • Спасибо
Реакции: material

material

Client
Регистрация
23.03.2021
Сообщения
329
Благодарностей
124
Баллы
43
Если дело именно в том, что код выходит по ошибке, если нет переменной - то первое что напрашивается, это прежде чем присваивать переменной какое-то значение - проверить существует ли эта переменная. Таким образом код никогда не выйдет по ошибке и продолжит работу. Пример:
C#:
if(project.Variables.Keys.Contains("Variable1")) project.Variables["Variable1"].Value = "0";
Красивое, логичное и простое решение. Спасибо большое. =)
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 794
Благодарностей
2 466
Баллы
113
try
{
project.Variables["Variable1"].Value = "0";
}
catch
{
project.SendInfoToLog("Нет такой переменной");
}

Или как вам ответили выше, перед тем как присвоить, проверьте на существование
Попытаюсь объяснить на пальцах - когда код срабатывает с ошибкой, конструкция try {} catch {} не просто выходит по ошибке и игнорирует её, а одновременно ещё занимается сбором информации о том, где и почему произошла ошибка. Если напичкать код подобными конструкциями, и запускать шаблон в многопотоке - получится не обоснованное потребление ресурсов - и определить потом почему же Зенно глючит и жрёт ресурс будет проблематично.
Из-за чего,решил все же повторно ответить в этой теме, чтобы было понятно, что для данного конкретного случая - лучше не использовать try {} catch{};

Простите, что вставил 5 копеек.
C#:
try { project.Variables["Variable1"].Value = "0"; } catch(Exception e){
    return Global.ZennoLab.Json.JsonConvert.SerializeObject(e,  Global.ZennoLab.Json.Formatting.Indented);
}
JSON:
{
  "ClassName": "ZennoLab.TemplateManipulator.V4.Helpers.InvalidVariableException",
  "Message": "No such variable: Variable1",
  "Data": null,
  "InnerException": {
    "ClassName": "System.InvalidOperationException",
    "Message": "Последовательность не содержит соответствующий элемент",
    "Data": null,
    "InnerException": null,
    "HelpURL": null,
    "StackTraceString": "   в System.Linq.Enumerable.First[TSource](IEnumerable`1 source, Func`2 predicate)\r\n   в ZennoLab.TemplateManipulator.V4.StaticBlocks.Components.VariablesV4.get_Item(String parName)",
    "RemoteStackTraceString": null,
    "RemoteStackIndex": 0,
    "ExceptionMethod": "8\nFirst\nSystem.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\nSystem.Linq.Enumerable\nTSource First[TSource](System.Collections.Generic.IEnumerable`1[TSource], System.Func`2[TSource,System.Boolean])",
    "HResult": -2146233079,
    "Source": "System.Core",
    "WatsonBuckets": null
  },
  "HelpURL": null,
  "StackTraceString": "   в ZennoLab.TemplateManipulator.V4.StaticBlocks.Components.VariablesV4.get_Item(String parName)\r\n   в ZennoLab.OwnCode.C3134a02906cf4320bc7a748a2e498ed0.M3134a02906cf4320bc7a748a2e498ed0(IZennoPosterProjectModel project, Instance instance) в c:\\Users\\User\\AppData\\Local\\Temp\\CompilerFolder\\ProjectMaker\\Afa7145ae2b414fd5bb98d24b41c3296a\\g4cslf3x.0.cs:строка 31",
  "RemoteStackTraceString": null,
  "RemoteStackIndex": 0,
  "ExceptionMethod": "8\nget_Item\nProjectMaker, Version=5.47.0.0, Culture=neutral, PublicKeyToken=null\nZennoLab.TemplateManipulator.V4.StaticBlocks.Components.VariablesV4\nZennoLab.InterfacesLibrary.ProjectModel.ILocalVariable get_Item(System.String)",
  "HResult": -2146233088,
  "Source": "ProjectMaker",
  "WatsonBuckets": null
}
 
  • Спасибо
Реакции: material

material

Client
Регистрация
23.03.2021
Сообщения
329
Благодарностей
124
Баллы
43
try
{
project.Variables["Variable1"].Value = "0";
}
catch
{
project.SendInfoToLog("Нет такой переменной");
}

Или как вам ответили выше, перед тем как присвоить, проверьте на существование
Так же благодарю, что не прошли мимо, запишу себе решение в заметки, на будущее.
 

Кто просматривает тему: (Всего: 4, Пользователи: 0, Гости: 4)