#c# #string
Вопрос:
У меня есть текстовая библиотека, состоящая из различных групп, в которых есть несколько сообщений. я могу получить доступ к определенному сообщению (и отобразить его содержимое Label.Text
) следующим образом :
Label.Text = Globals.TextLibrary.Group1.Messages[0].Message;
я могу определить строковую переменную, которая будет динамически изменяться в соответствии с моими потребностями :
for (int i=0;ilt;10;i ) { string temp="Globals.TextLibrary." this.InstanceName ".Messages[" i "].Message"; Label[i].Text= stringToName(temp); //need a way to make temp the variable name }
Есть ли способ использовать эту временную строку в качестве имени переменной для извлечения строки из ее местоположения?
Варианты этого, я уверен, задавались и раньше, и я уже некоторое время просматривал подобные темы, не приходя к какому-либо выводу.
Любая помощь будет очень признательна! Спасибо, Фрэнк
Комментарии:
1. Релевантным поисковым термином является «отражение».
2. Отражение было бы кстати, ИЛИ, если это зависит от вас, я бы рекомендовал рассмотреть возможность изменения типа
TextLibrary
на aDictionarylt;string, YourMessageClass[]gt;
вместо того, чтобы делать все это настолько жестко закодированным. Используемый тип данных должен соответствовать вашим потребностям, а когда он жестко закодирован, это не так.3. Вы можете сделать это достаточно легко с помощью размышлений, хотя, скорее всего, вам следует переосмыслить проблему…
4. Это предназначено для управления устройством hmi, в которое встроены эти текстовые библиотеки. Вероятно, есть лучший способ сделать это, но мне легко поддерживать этот способ и легко объяснить, как другие могут поддерживать и обновлять списки.
5. @TheGeneral, я потратил довольно много времени на поиски, но безрезультатно. Если это достижимо с помощью размышлений, не могли бы вы, пожалуйста, указать мне правильное направление?
Ответ №1:
Это просто не имеет значения. Вы могли бы создать API для предоставления строки, например, a Funclt;stringgt;
на an interface
с одним string
получателем свойств (и конкретной реализацией), но это вам здесь не поможет , так как то, что вы назначаете .Text
, должно быть a string
, а не каким-то прокси для строки. В стороне, есть такая вещь , как a ref string
, но это также не помогает вам здесь по тем же причинам, плюс вы не можете хранить a ref
нигде, кроме как в локальной переменной в простом (непереписанном) методе.
В принципе: вам нужно будет знать, что .Text
нужно обновлять, и периодически писать код для этого. Возможно, вы могли бы использовать привязку данных к чему-то, что имеет ряд string
свойств, и обновить это (при условии, что оно также содержит события уведомлений). Это, по крайней мере, отделяет косвенный источник от цели пользовательского интерфейса с помощью общего простого посредника.
Комментарии:
1. Значит, другие комментарии, которые я получил по поводу размышлений, не имеют отношения к моей ситуации?
2. @Frank_ Я не вижу, как отражение могло бы помочь здесь, нет. Может быть, я что-то упустил в вопросе :пожимаю плечами: