C# Есть ли способ использовать переменную как свойство?

Я хочу использовать переменную, здесь я использую TextName в качестве переменной. затем используйте его КАК свойство. Конечно, я не могу, потому что это строка, но как мне заставить переменную/строку обрабатываться как текст в строке, которую она содержит? В таблицах Google это очень похоже на то, что называется INDIRECT, чтобы иметь возможность быть данными, на которые вы ссылаетесь.

// Code I like to write:
TextName = "richTextBox";
TextName.Text = "text for richTextBox"; 

Я хочу, чтобы этот код рассматривался как

richTextBox.Text = "text for richTextBox";

но с richTextBox.Text полностью или частично, чтобы быть переменной, так что я могу поместить все это в метод и изменить только переменную, а не иметь весь метод по всему коду снова и снова.

Я использую .NET6.0, если это имеет значение.

Мне кажется, что вы хотите использовать переменную, чтобы указать, к какому свойству обращаться, например, как JavaScript позволяет вам сказать obj[a], и если a равно "name", вы получите obj.name. Это то, что ты имеешь в виду?

madreflection 17.05.2022 23:17

@madreflection да, я точно хочу использовать переменную или указать, к какому свойству нужно получить доступ.

Dawnbomb 17.05.2022 23:20

Вам нужно использовать что-то вроде FindControl(TextName) или Controls.Where(c => c.Name == TextName). Но часто необходимость в этом является результатом серьезной дизайнерской ошибки, допущенной ранее, и вам лучше вернуться к чертежной доске и понять, почему вы оказались в таком положении.

Joel Coehoorn 17.05.2022 23:20

@JoelCoehoorn Могу ли я получить полный пример? (я попробовал и получил, что FindControl не существует в текущем контексте) добавление пробела дает массу ошибок, а Controls. Где не сказано определения для Где. Кроме того... я не уверен, как это может быть серьезной ошибкой проектирования, конечно, поиск чего-то с помощью переменной намного эффективнее, когда вы пишете весь метод снова и снова и имеете сотни тысяч строк кода для чего-то, что нужно только один свойство. РЕДАКТИРОВАТЬ; При ближайшем рассмотрении я думаю, что просто FindControl не принимается, работает ли он на .NET6?

Dawnbomb 17.05.2022 23:28
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
0
4
44
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я полагаю, вы собираетесь сделать это в форме. В этом случае вы можете добавить этот код в свою форму:

public string this[string name]
{
    get
    {
        return this.Controls.ContainsKey(name) ?
            this.Controls[name].Text :
            null;
    }
        
    set
    {
        if (this.Controls.ContainsKey(name))
        {
            var control = this.Controls[name];
            control.Text = value;
        }
    }
}

И получить/установить текст любого Control таким образом:

this["richTextBox"] = "text for richTextBox";

var text = this["richTextBox"];

this ваша форма.

Если вы собираетесь использовать несколько форм, вы можете создать методы расширения:

public static class FormExtends
{
    public static string GetText(this Form form, string name, string defaultText = null)
    {
        return form.Controls.ContainsKey(name) ?
            form.Controls[name].Text :
            (defaultText ?? string.Empty);
    }

    public static void SetText(this Form form, string name, string text)
    {
        if (form.Controls.ContainsKey(name))
        {
            var control = form.Controls[name];
            control.Text = text;
        }
    }
}

И упростите код в каждой форме:

public string this[string name]
{
    get { return this.GetText(name); }
    set { this.SetText(name, value); }
}

хорошо, я снова и снова отвечал или возился с чем-то еще, так как это звучит глупо, но что-то простое должно быть у меня в голове, я использовал это и все еще пробовал TextName или текст вместо свойства, которое записывает массив, но ... ммм, ничего, это просто дает мне текст для richTextBox ВНУТРИ текстового поля вместо числа 5, вытаскиваемого из массива.. Как я могу на самом деле использовать это?

Dawnbomb 17.05.2022 23:55

подождите, возможно, у меня это заработало (я бы отредактировал, но мне сказали, что я не могу редактировать дольше, чем 5 минут >_>;)

Dawnbomb 18.05.2022 00:03

Для зрителей позже я не использую this["richTextBox"] = "text for richTextBox"; var text = это["richTextBox"]; вместо этого я использую this[TextName] (или другую переменную, которая является строкой) вместо имени элемента управления, и это работает. Все еще нужно, чтобы другая часть кода, который он разместил, была где-то. Спасибо Виктор!

Dawnbomb 18.05.2022 00:14

form.Controls["xxx"] дает вам экземпляр Control с именем Name="xxx". Вы можете использовать строку напрямую или переменную типа string, это одно и то же. Любой производный класс Control (TextBox, RichTextBox...) имеет свойство Text, которое является свойством, которое получают/устанавливают методы расширения.

Victor 18.05.2022 00:40

Другие вопросы по теме