Косвенный доступ к строковой переменной C#

#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 на a Dictionarylt;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_ Я не вижу, как отражение могло бы помочь здесь, нет. Может быть, я что-то упустил в вопросе :пожимаю плечами: