powered by simpleCommunicator - 2.0.57     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как использовать имя параметра класса если его название в строке?
11 сообщений из 11, страница 1 из 1
Как использовать имя параметра класса если его название в строке?
    #38141053
stim24
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть класс.
Код: c#
1.
2.
3.
4.
5.
6.
7.
class CClass
{
  public CClass()
  {
  }
  int param;
}


Где-то в коде мы задаем что поле есть такое поле
Код: c#
1.
string s="param";


У нас есть object в котором сидит класс CClass как нам
с класс object получить значения параметра param?

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
CClass c1=new CClass();
c1.param=10;
object nonameobject=c1;

CClass c2=(CClass)nonameobject;

MessageBox.Show(c2.param.ToString()); //  --

string s="param";

// Как получить зная названия в s получить значения 
// из nonameobject не конвертируя в CClass 

// ????



Как получить зная названия в s получить значения
из nonameobject не конвертируя в CClass
...
Рейтинг: 0 / 0
Как использовать имя параметра класса если его название в строке?
    #38141057
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как использовать имя параметра класса если его название в строке?
    #38145491
stim24
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Че-то сколько не пробывал ничего не получилось...

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
           string s="param";
           object c = f.Item;

            Type myType = typeof(object);

            FieldInfo[] myField = myType.GetFields(BindingFlags.Public | BindingFlags.Instance);
            MessageBox.Show("length=" + myField.Length.ToString());
            for (int i=0;i<myField.Length;i++)
            {
                MessageBox.Show(myField[i].Name);
                if (myField[i].Name==s)
                {
                    MessageBox.Show(myField[i].Name);
                }
            }



Длина массива myField = 0
...
Рейтинг: 0 / 0
Как использовать имя параметра класса если его название в строке?
    #38145523
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stim24,

или поле public делай или в getfiekds nonpublic запрашивай
да и typeof(CClass) а не от object получай.
...
Рейтинг: 0 / 0
Как использовать имя параметра класса если его название в строке?
    #38145590
stim24
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если я знаю CClass тогда вообще в этим не стоит замачиваться
Код: c#
1.
CClass c2=(CClass)nonameobject;


Фишка в том что я не знаю какой там класс в object а знаю только что
у некоторого класса который сейчас в object есть параметр/св-во в названием
которое лежит в переменной s
...
Рейтинг: 0 / 0
Как использовать имя параметра класса если его название в строке?
    #38145600
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stim24,

1)сначала исправь первые две ошибки.
2) c1.GetType() - вернёт нужный тип, у которого и нужно получать значения полей
3) Точно поле, а не свойство нужно?
...
Рейтинг: 0 / 0
Как использовать имя параметра класса если его название в строке?
    #38145746
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stim24,

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
string s="param";
           object c = f.Item;

            Type myType = typeof(object);

            FieldInfo[] myField = myType.GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
            MessageBox.Show("length=" + myField.Length.ToString());
            for (int i=0;i<myField.Length;i++)
            {
                MessageBox.Show(myField[i].Name);
                if (myField[i].Name==s)
                {
                    MessageBox.Show(myField[i].Name);
                }
            }
...
Рейтинг: 0 / 0
Как использовать имя параметра класса если его название в строке?
    #38150488
stim24
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что-то не получается ... тут может я показал простой случай.

Вообще в object я подаю класс из Entity таблички.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
//          cRegion - это ComboBox
//          Region cc = (Region)cRegion.SelectedItem; - Если знает какая там таблица/класс

            Object c = cRegion.SelectedItem;
            Type myType = c.GetType();
            
            //BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy 
            FieldInfo[] myField = myType.GetFields(BindingFlags.NonPublic | BindingFlags.Instance);

            MessageBox.Show("length=" + myField.Length.ToString());
            for (int i = 0; i < myField.Length; i++)
            {
                MessageBox.Show("Name="+myField[i].Name+
                                " FieldType="+myField[i].FieldType.ToString()+
                                " GetType="+myField[i].GetType().ToString()+
                                " ToString=" + myField[i].ToString()+
                                " Declaring Type="+myField[i].DeclaringType+
                                " IsPubluc="+myField[i].IsPublic+
                                " MemberType="+myField[i].MemberType+
                                " IsFamaly="+myField[i].IsFamily);
            }



Так вот все срабатывает, но только в класса Region есть поля (id,name) а они отображаются как "_name","_id" почему-то
И я ни как не могу получить значения
если делаю так
Код: c#
1.
MessageBox.Show(myField[i].GetValue("_id").ToString());


Тогда ошибка
Поле '_id', заданное для типа 'Talon.Region' не является полем в целевом объекте, который имеет тип 'System.String'.
...
Рейтинг: 0 / 0
Как использовать имя параметра класса если его название в строке?
    #38150568
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stim24Так вот все срабатывает, но только в класса Region есть поля (id,name) а они отображаются как "_name","_id" почему-то
И я ни как не могу получить значения
если делаю так
Код: c#
1.
MessageBox.Show(myField[i].GetValue("_id").ToString());



Тогда ошибка
Поле '_id', заданное для типа 'Talon.Region' не является полем в целевом объекте, который имеет тип 'System.String'.

как насчёт почитать для начала мсдн про GetValue?
...
Рейтинг: 0 / 0
Как использовать имя параметра класса если его название в строке?
    #38150577
stim24
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Получилось !!! Я читал msdn просто не так понял...
просто по примеру msdn понял что надо указывать название переменной, а оказывается сам класс
и того получается надо сделать так
Код: c#
1.
MessageBox.Show(myField[i].GetValue(cRegion.SelectedItem).ToString());



Правда я так и не понял почему там названия идут '_id','_name' а не 'id','name'
...
Рейтинг: 0 / 0
Как использовать имя параметра класса если его название в строке?
    #38150589
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stim24Правда я так и не понял почему там названия идут '_id','_name' а не 'id','name'
Код: c#
1.
2.
3.
4.
5.
class Example
{
    int _id;
    string name { get; set; }
}


Скорее всего потому что _id/_name у тебя поля, а id/name свойства (см. пример выше). Их возвращают разные методы - GetFields и GetProperties соответственно.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как использовать имя параметра класса если его название в строке?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]