Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль

Купить рекламу на форуме 15-35 тыс рублей в месяц

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail


Оплата за обучение в Kata Academy только после твоего трудоустройства в IT, начни карьеру Middle Java-разработчика


Ответ
 
Опции темы Поиск в этой теме
Старый 29.12.2021, 09:09   #1
melky
Пользователь
 
Регистрация: 27.05.2018
Сообщений: 40
По умолчанию Подстановка имени свойства в функцию

Есть такой метод поиска по List<myClass>

Код:
            var list = myClass;
            List<myClass> selected = new List<myClass>();

if (checkBox_Conteins.Checked) // Поиск с начала строки или повезде с учетом регистра или без
            {
                if (!checkBox_ToUpper.Checked)
                {
                    selected = (from x in list
                                where x.Name != null
                                where x.Name.ToUpper().Contains(string.Format(textBox_FilterName.Text).ToUpper()) // В любой части строки
                                select i).ToList();
                }
ну и так далее, с начала строки, без учета регистра и т.д.

в классе есть свойства Name, ID, Comment и т.д. Есть ли компактное решение подставлять вместо x.Name любое из свойств ?
типа where x.'свойство'.ToUpper() и так далее.
Имена свойств могу задать либо в Combobox либо взять из имени столбца DataGridView не сильно принципиально
melky вне форума Ответить с цитированием
Старый 29.12.2021, 17:25   #2
melky
Пользователь
 
Регистрация: 27.05.2018
Сообщений: 40
По умолчанию

Вопрос решен. И это на 90 с лишним просмотров...

string fField = comboBox1.Text; // соответственно задать в списке наши имена, назначить где-нить одно из них по дефолту, хотя при желании их можно вытянуть в List прямо из класса

В myClass добавить

Код:
        public object this[string propName]
        {
            get { return this.GetType().GetProperty(propName).GetValue(this, null); }
            set { this.GetType().GetProperty(propName).SetValue(this, value, null); }
        }
Так как это объект, то потребуется на всякий случай конвертация, а то при проверке ругается, что это объект. В общем так

Код:
where Convert.ToString(i[fField]).ToUpper().Contains(string.Format(textBox_FilterName.Text).ToUpper()) // В любой части строки
Ну можно еще в классе в виде Case прописать нужные перечисления. Индексация свойств класса.

Последний раз редактировалось melky; 29.12.2021 в 17:28.
melky вне форума Ответить с цитированием
Старый 29.12.2021, 17:29   #3
melky
Пользователь
 
Регистрация: 27.05.2018
Сообщений: 40
По умолчанию

Код:
public string this[string propname]
{
    get
    {
        switch (propname)
        {
            case "Name_": return Name_;
            case "Signal": return Signal;
            case "Type": return Type;
            case "Comment": return Comment;
            default: throw new Exception("Unknown Property Name");
        }
    }
    set
    {
        switch (propname)
        {
            case "Name_":
                Name_ = value;
                break;
            case "Signal":
                Signal = value;
                break;
            case "Type":
                Type = value;
                break;
            case "Comment":
                Comment = value;
                break;
        }
    }
}
это вариант через перечисление.

Последний раз редактировалось melky; 29.12.2021 в 17:31.
melky вне форума Ответить с цитированием
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача длинного полного имени в функцию FindFirstFileW. Korshi Win Api 12 26.06.2019 08:50
написать функцию, определяющую пол продавца. Используя функцию, вывести продавцов - мужчин Nuc SQL, базы данных 12 12.03.2018 10:12
Ввод имени файла с клавиатуры и передача в функцию - C (СИ) Alex_Kardo Помощь студентам 4 17.11.2015 15:16
Надо написать функцию: удаление записи по имени Руслан555 Паскаль, Turbo Pascal, PascalABC.NET 5 20.12.2011 20:25
Описать функцию нахождения расстояния между 2-мя точками на плоскости, заданными своими координатами, и функцию .... zzz6 Помощь студентам 2 06.07.2011 07:24

Реклама для незарегистрированных, регистрация на форуме