powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / c# верификация типов свойств класса
25 сообщений из 55, страница 1 из 3
c# верификация типов свойств класса
    #39756560
Nechto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день! Всех с рождеством!

Подскажите пожалуйста можно ли каким-то способом определить, свойство с типом Tzm?

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
public class Position
{
    public string Code { get; set; }
    public string Caption { get; set; }

    public Tzm Tzm { get; set; } // НЕ ЗНАЮ КАК ЭТО СВОЙСТВО ВЫЯВИТЬ
    public ICollection<Mch> Mch { get; set; }  
}
public class Tzm
{
    public int Code { get; set; }
}

// ...

var type = typeof(Position).GetType();
var properties = type.GetProperties(BindingFlags.Instance | BindingFlags.Public).Where(w => w.CanWrite);
foreach (var property in properties)
{
    if (typeof(IEnumerable).IsAssignableFrom(property.PropertyType) && property.PropertyType != typeof(string))
    {
         var genericType = property.PropertyType.GetGenericArguments().First();
         var entity = Activator.CreateInstance(genericType);
    }
    
    if (property.PropertyType.Name == property.Name)
    {
         // есть ли ещё один способ выявить свойство Tmz ???
    }
}
...
Рейтинг: 0 / 0
c# верификация типов свойств класса
    #39756579
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nechto,
нну наверно так
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
  foreach (var property in typeof(Position).GetProperties(BindingFlags.Instance | BindingFlags.Public))
            {
                if (property.PropertyType== typeof(Tzm))
                {
                    гы
                }
              
            }
...
Рейтинг: 0 / 0
c# верификация типов свойств класса
    #39756593
Nechto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то в степиNechto,
нну наверно так
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
  foreach (var property in typeof(Position).GetProperties(BindingFlags.Instance | BindingFlags.Public))
            {
                if (property.PropertyType== typeof(Tzm))
                {
                    гы
                }
              
            }



Такой способ решения очевиден. Я так понимаю решения по сути нет, так как типы свойств тоже классы. Если использовать джинерик, то выход только один и это строгое наименование.
...
Рейтинг: 0 / 0
c# верификация типов свойств класса
    #39756602
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nechto,

позорище, 8 лет коту под хвост
...
Рейтинг: 0 / 0
c# верификация типов свойств класса
    #39756605
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не понял, что хочет автор...
да и вообще, зачем...
...
Рейтинг: 0 / 0
c# верификация типов свойств класса
    #39756606
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesне понял, что хочет автор...
да и вообще, зачем...Понять бы - что. Потом уже можно обосновать - зачем.
...
Рейтинг: 0 / 0
c# верификация типов свойств класса
    #39756607
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
var type = typeof(Position).GetType();
Разве вот эта строка не вернет тип типа Type?
typeof(T) возвращает тип Type, а GetType() возвращает тип типа Type или что вообще? :D
...
Рейтинг: 0 / 0
c# верификация типов свойств класса
    #39756617
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nechto
Код: c#
1.
2.
3.
4.
if (property.PropertyType.Name == property.Name)
    {
         // есть ли ещё один способ выявить свойство Tmz ???
    }



дичь какая-то



NechtoЯ так понимаю решения по сути нет, так как типы свойств тоже классы.

либо надо выпить палёнки, либо объясните по-человечески, чего хотите? зачем? для чего? озвучите цель!
...
Рейтинг: 0 / 0
c# верификация типов свойств класса
    #39756725
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesне понял, что хочет автор...
да и вообще, зачем...не хочет стабильности и проектирования.
Все темы про то как программировать, когда ничего не известно.
https://ru.m.wikipedia.org/wiki/Рефлексия_(программирование)
...
Рейтинг: 0 / 0
c# верификация типов свойств класса
    #39756843
Nechto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я всего лишь задал вопрос, а не просил переходить на личности!
Нужно разработать WPF приложение, которое будет открывать xml файл и выводить его содержимое на экран в виде дерева (таблицы).
Xml файл состоит из - тегов и атрибутов. Выгружать нужно определённые теги и атрибуты, не все содержимое файла.

Мой способ решения:
1.) Описать каждый тег классами. Наименнование классов и свойств имеют идентичные наименование с тегам и атрибутами xml документа
Код: c#
1.
2.
3.
4.
5.
6.
public class Position // Тег Position 
{
    public string Caption { get; set; } // атрибут Caption  
    public Tzm Tzm { get; set; } // вложенный тег Tzm со своей атрибутикой описанной в классе Tzm 
    public ICollection<Mch> Mch { get; set; } // коллекция вложенных тегов Mch со своей атрибутикой описанной в классе Mch    
}

2.) Написал рекурсивную функцию, которая перебирает классы, свойства и коллекции классов и заносит данные из xml файла.
Как раз здесь у меня и возникла трудность как идентифицировать public Tzm Tzm { get; set; } , стандартными методами класса Type.
...
Рейтинг: 0 / 0
c# верификация типов свойств класса
    #39756845
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nechto как идентифицировать понятнее не стало. Неизвестно, что ты вкладываешь в этот термин? Найти свойство по известному типу? Найти свойство по имени? Определить тип по имени? Еще что-то?

А вообще, XDocument настолько легко проецируется на TreeView, что я не знаю, что тут еще изобретать надо....

Опять же, зачем писать парсер руками, если есть десериализатор из коробки.
...
Рейтинг: 0 / 0
c# верификация типов свойств класса
    #39756849
Nechto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProNechto как идентифицировать понятнее не стало. Неизвестно, что ты вкладываешь в этот термин? Найти свойство по известному типу? Найти свойство по имени? Определить тип по имени? Еще что-то?
В процессе выполнения алгоритма, нужно определить чем является тип свойства:
1. Классом описывающий тег (если так, то я его активирую и вношу все атрибуты)
2. Свойством описывающий атрибут. (просто вношу значения атрибута)


Shocker.ProNechto как идентифицировать
А вообще, XDocument настолько легко проецируется на TreeView, что я не знаю, что тут еще изобретать надо....
Опять же, зачем писать парсер руками, если есть десериализатор из коробки.

Такое может выгрузить в treeview?
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
<Post Id="0" Caption="aaaaaa" Code="US">
     <Position Caption="Строка 1" SysID="1" Number="5">
           <Post>
                 <Mz Name="A1" Id="11" Value="548231"/>
                 <Mt Name="Б2" Id="0" Value="42323"/>
                 <Mt Name="Б3" Id="1" Value="31231"/>
           </Post>
     </Position>
</Post> 
<Post Id="1" Caption="bbbbbb" Code="US">
     <Position Caption="Строка 1" SysID="1" Number="5">
           <Post>
                 <Mz Name="A1" Id="11" Value="548231"/>
                 <Mt Name="Б2" Id="0" Value="42323"/>
                 <Mt Name="Б3" Id="1" Value="31231"/>
           </Post>
     </Position>
</Post> 
...
Рейтинг: 0 / 0
c# верификация типов свойств класса
    #39756850
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А нельзя выражаться еще яснее?

Nechtoнужно определить чем является тип свойства:
1. Классом...
2. Свойством...
1. тип свойства является классом
2. тип свойства является свойством
расшифруй
...
Рейтинг: 0 / 0
c# верификация типов свойств класса
    #39756851
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NechtoТакое может выгрузить в treeview?TreeView отображает иерархический IEnumerable

XDocument является иерархическим IEnumerable
Всё. Этого достаточно, чтобы спроецировать XDocument на TreeView. То есть там даже код почти не нужен, только шаблон для узла
...
Рейтинг: 0 / 0
c# верификация типов свойств класса
    #39756852
Nechto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProА нельзя выражаться еще яснее?

Nechtoнужно определить чем является тип свойства:
1. Классом...
2. Свойством...
1. тип свойства является классом
2. тип свойства является свойством
расшифруй

Код: c#
1.
2.
1. public Tzm Tzm { get; set; } //(в xml это тег <Tmz Id="1" Code="Текст" ... >)
2. public string Code { get; set; } //(в xml это атрибут <X Code="Текст">)
...
Рейтинг: 0 / 0
c# верификация типов свойств класса
    #39756853
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну то есть у тебя не получается отличить с помощью рефлекшена string от не-string-а? Правильно я расшифровал?
...
Рейтинг: 0 / 0
c# верификация типов свойств класса
    #39756860
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но опять же, для этой цели (помечать нужные свойства) существуют штатные атрибуты [XmlAttribute] и [XmlElement]. Существует уже готовый встроенный класс для вот этого:NechtoНаписал рекурсивную функцию, которая перебирает классы, свойства и коллекции классов и заносит данные из xml файла.Существует куча инструментов, которые создают тебе класс по xsd-схеме, либо по готовому xml (если схемы у тебя нет). Непонятно, зачем писать свои велосипеды (разве что для учебных целей)
...
Рейтинг: 0 / 0
c# верификация типов свойств класса
    #39756868
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WPF поддерживает XPath возможность стоит смотреть в этом направлении.
Типы значений (структуры) наследуют тип ValueType, возможно стоит исходить из этого, если нужно редактировать это значение, то имеет смысл проверять их на IConvertible и преобразовывать их из строки в нужный вам тип.
...
Рейтинг: 0 / 0
c# верификация типов свойств класса
    #39756871
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman MejtesXPath
+1
NechtoЯ всего лишь задал вопрос, а не просил переходить на личности!
тебя 8 человек просят обрисовать задачу верхнего уровня (по ГУИ)


NechtoВыгружать нужно определённые теги и атрибуты, не все содержимое файла.
как выбирает юзверь что выгружать и что не выгружать?
Как учитывается наследование?
Как учитываются связи? Например в одной ноде справочник, а в другой ноде сбоку данные этого справочника классификатора?
ЗЫ.
Получается что тебе надо слово "конвертер" из А в Б.
...
Рейтинг: 0 / 0
c# верификация типов свойств класса
    #39756873
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman MejtesWPF поддерживает XPath возможность стоит смотреть в этом направлении.
Типы значений (структуры) наследуют тип ValueType, возможно стоит исходить из этого, если нужно редактировать это значение, то имеет смысл проверять их на IConvertible и преобразовывать их из строки в нужный вам тип.
мне кажется, что XML стоит вообще пока без типов рассматривать.
авторНужно разработать WPF приложение, которое будет открывать xml файл и выводить его содержимое на экран в виде дерева (таблицы).
где тут типы?
...
Рейтинг: 0 / 0
c# верификация типов свойств класса
    #39756880
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NechtoТакое может выгрузить в treeview?
вариант1:
Код: c#
1.
2.
3.
4.
5.
XDocument doc = XDocument.Parse(str); 
...
foreach(var child in item.ChildNodes)
      tree.Add(.....
    {
...
Рейтинг: 0 / 0
c# верификация типов свойств класса
    #39756883
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NechtoВыгружать нужно определённые теги и атрибуты, не все содержимое файла.вариант решения №2 - загружаете весь XML (либо циклом либо сериализатором). Потом просто фильтруете (скрываете видимость)
node.visible=false
...
Рейтинг: 0 / 0
c# верификация типов свойств класса
    #39756930
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NechtoМой способ решения:
1.) Описать каждый тег классами.

Плохое решение. XDocument, XPath, а для описания структуры XSD.

Если речь идёт о тупой (де)сериализации в XML, читайте соответствующую литературу.
...
Рейтинг: 0 / 0
c# верификация типов свойств класса
    #39756947
Nechto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Правильно сказали, велосипед сделал исключительно из интереса.

Учитывая ваши советы, решил использовать XDocument. В велосипеде использовал XmlDocument.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
// ModelView.cs
var xdoc = XDocument.Load(@"myfile.xml");
Items = xdoc.Descendants("Chapter");

private IEnumerable<XElement> _items;
public IEnumerable<XElement> Items
{
    get { return _items; }
    set
    {
        if (_items != value)
        {
            _items = value;
            RaisePropertyChanged("Items");
         }
     }
}


Код: xml
1.
2.
3.
4.
<!--View.Xaml-->
<TreeView ItemsSource="{Binding Items2}">
    <!-- теперь я так понимаю нужно описать узлы (шаблоны), используя XPath -->
</TreeView>
...
Рейтинг: 0 / 0
c# верификация типов свойств класса
    #39756986
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nechto,
Модель делают на классах, а не на текстовых файлах xml.
Т.е. одноразовый импорт в классы и потом забыть про xml.
...
Рейтинг: 0 / 0
25 сообщений из 55, страница 1 из 3
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / c# верификация типов свойств класса
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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