Добавление переменной watch показывает поле, но компиляции не нравится поле?

Я должен получить некоторые данные из системы ERP (SAP) в C#. Не вдаваясь в подробности о SAP (я уверен, что вы не хотели бы знать об этом). Я вызываю некоторую удаленную функцию из C# и она работает, но у меня странная проблема. Одна из функций, которую мне нужно вызвать в SAP из C#, называется BAPI_USER_GET_DETAIL. Так что я делаю это в C#:

        s.Bapi_User_Get_Detail("No","10217502", out address, out alias, out companyName,
            out defaults, out islocked, out lastmodified, out logonData, out ref_user, out snc, out uclass, 
            ref activeGroups, ref addcomrem, ref addfax, ref addpag, ref addprt, ref addrfc,
            ref addrml, ref addsmtp, ref addssf, ref addtel, ref addtlx, ref addttx, ref adduri, 
            ref addx400, ref extidhead, ref extidpart, ref groups, ref parameter, ref parameter1,
            ref profiles, ref return0, ref systems, ref uclasssys); 

        Console.WriteLine(companyName._Company);
        Console.ReadLine();

SAP требует все эти поля, так что это вполне нормальный код. Мне нужно вытащить один из out аргументы в этой функции. А именно аргумент company то есть после того, как я выполню эту процедуру, я должен иметь значение внутри этого company поле и часы показывают, что прямо здесь:

У меня проблема в том, что _Company имеет значение, которое мне нужно, но я не могу companyName._Company (визуальная студия не любит это). Однако, если я делаю это в моих часах, как показано выше, они отображаются правильно. Это дает мне название компании. Так как же часы показывают значение правильно? Я должен делать что-то простое в C# неправильно.

редактировать

Похоже, ошибка из-за уровня защиты в SAP. Интересно, как я могу это разоблачить...

1 ответ

Решение

Из того, что я вижу, наиболее вероятное объяснение that _Company это личное поле. Вот почему он не доступен напрямую из кода. Окно Watch использует отражение (или похожую технику), чтобы получить всех участников, включая приватных и защищенных.

Редактировать:
Если SAP сделал это частным, это, вероятно, по уважительной причине. Но если вы все равно хотите выбрать значение, вы можете попробовать что-то вроде этого

companyName.GetType().GetField("_Company", BindingFlags.NonPublic).GetValue(companyName);
Другие вопросы по тегам