Я использую реактор. net для обфускации моего кода c#. Я не обращал внимания на этот вопрос, когда начинал писать свое текущее приложение, поэтому теперь я проверяю весь свой код, чтобы убедиться, что они хорошо работают с обфускацией. Я решил многие из этих проблем, но есть 1, я не мог понять, почему он не работает.
Мой рабочий код без обфускации:
for (int i = 0; i < LoadedLivePresets.Count; i++)
{
try
{
MessageBox.Show("LoadedLivePresets[i] : " + LoadedLivePresets[i].ToString() + "\nDetails : " + LoadedLivePresets[i].PresetDetails.ToString());
ListViewItem LVI = new ListViewItem();
MessageBox.Show("LoadedLivePresets[i].PresetName : " + LoadedLivePresets[i].PresetName);
if (LVI == null)
MessageBox.Show("LVI NULL");
MessageBox.Show("LVI.Text : " + LVI.Text);
LVI.Text = LoadedLivePresets[i].PresetName;
MessageBox.Show("a1a1a1a1");
LVI.Tag = LoadedLivePresets[i];
MessageBox.Show("a2a2a2a2");
mainForm.lvLiveSources.Items.Add(LVI);
MessageBox.Show("a3a3a3a3");
}
catch (Exception ex)
{
MessageBox.Show("ex : " + ex.Message);
break;
}
}
Я написал сообщение коробки повсюду, чтобы определить местонахождение проблемы. Я знаю, что в моем пользовательском списке есть элементы, в которых я уверен. Когда я запускаю этот код после обфускации, я правильно вижу свои предустановленные данные. Я вижу свое presetName правильно, пока никаких проблем. Мой код не показывает "LVI NULL", поэтому if (LVI == null)
становится ложным. Я вижу, что LVI.Text пуст, поэтому я могу получить доступ к этому свойству после обфускации, но проблема в этой строке LVI.Text = LoadedLivePresets[i].PresetName;
после того, как эта строка будет выполнена, мой код переходит в исключение и говорит, что объект null .. Я проверил LVI и знаю, что он не равен нулю, и я также проверил LoadedLivePresets [i] .PresetName, и он также заполнен.
Что мне здесь не хватает? обе стороны не равны нулю, так почему я получаю здесь ошибку объекта null? Кто-нибудь может мне объяснить, пожалуйста?