Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WinForms, .Net Framework Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 c# верификация типов свойств класса  [new]
Nechto
Member

Откуда:
Сообщений: 798
Добрый день! Всех с рождеством!

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

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 ???
    }
}
7 янв 19, 19:45    [21779582]     Ответить | Цитировать Сообщить модератору
 Re: c# верификация типов свойств класса  [new]
Где-то в степи
Member

Откуда: Под Таганрогом
Сообщений: 4318
Nechto,
нну наверно так
  foreach (var property in typeof(Position).GetProperties(BindingFlags.Instance | BindingFlags.Public))
            {
                if (property.PropertyType== typeof(Tzm))
                {
                    гы
                }
              
            }
7 янв 19, 21:29    [21779621]     Ответить | Цитировать Сообщить модератору
 Re: c# верификация типов свойств класса  [new]
Nechto
Member

Откуда:
Сообщений: 798
Где-то в степи
Nechto,
нну наверно так
  foreach (var property in typeof(Position).GetProperties(BindingFlags.Instance | BindingFlags.Public))
            {
                if (property.PropertyType== typeof(Tzm))
                {
                    гы
                }
              
            }


Такой способ решения очевиден. Я так понимаю решения по сути нет, так как типы свойств тоже классы. Если использовать джинерик, то выход только один и это строгое наименование.
7 янв 19, 22:03    [21779641]     Ответить | Цитировать Сообщить модератору
 Re: c# верификация типов свойств класса  [new]
Где-то в степи
Member

Откуда: Под Таганрогом
Сообщений: 4318
Nechto,

позорище, 8 лет коту под хвост
7 янв 19, 23:17    [21779674]     Ответить | Цитировать Сообщить модератору
 Re: c# верификация типов свойств класса  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 3404
не понял, что хочет автор...
да и вообще, зачем...
7 янв 19, 23:30    [21779682]     Ответить | Цитировать Сообщить модератору
 Re: c# верификация типов свойств класса  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20436
Roman Mejtes
не понял, что хочет автор...
да и вообще, зачем...
Понять бы - что. Потом уже можно обосновать - зачем.
7 янв 19, 23:32    [21779683]     Ответить | Цитировать Сообщить модератору
 Re: c# верификация типов свойств класса  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 3404
var type = typeof(Position).GetType();
Разве вот эта строка не вернет тип типа Type?
typeof(T) возвращает тип Type, а GetType() возвращает тип типа Type или что вообще? :D
7 янв 19, 23:32    [21779684]     Ответить | Цитировать Сообщить модератору
 Re: c# верификация типов свойств класса  [new]
hVostt
Member

Откуда:
Сообщений: 15619
Nechto
if (property.PropertyType.Name == property.Name)
    {
         // есть ли ещё один способ выявить свойство Tmz ???
    }


дичь какая-то Картинка с другого сайта.


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


либо надо выпить палёнки, либо объясните по-человечески, чего хотите? зачем? для чего? озвучите цель!
8 янв 19, 01:35    [21779703]     Ответить | Цитировать Сообщить модератору
 Re: c# верификация типов свойств класса  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
Roman Mejtes
не понял, что хочет автор...
да и вообще, зачем...
не хочет стабильности и проектирования.
Все темы про то как программировать, когда ничего не известно.
https://ru.m.wikipedia.org/wiki/Рефлексия_(программирование)
8 янв 19, 13:32    [21779846]     Ответить | Цитировать Сообщить модератору
 Re: c# верификация типов свойств класса  [new]
Nechto
Member

Откуда:
Сообщений: 798
Я всего лишь задал вопрос, а не просил переходить на личности!
Нужно разработать WPF приложение, которое будет открывать xml файл и выводить его содержимое на экран в виде дерева (таблицы).
Xml файл состоит из - тегов и атрибутов. Выгружать нужно определённые теги и атрибуты, не все содержимое файла.

Мой способ решения:
1.) Описать каждый тег классами. Наименнование классов и свойств имеют идентичные наименование с тегам и атрибутами xml документа
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.
8 янв 19, 19:38    [21780061]     Ответить | Цитировать Сообщить модератору
 Re: c# верификация типов свойств класса  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20436
Nechto
как идентифицировать
понятнее не стало. Неизвестно, что ты вкладываешь в этот термин? Найти свойство по известному типу? Найти свойство по имени? Определить тип по имени? Еще что-то?

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

Опять же, зачем писать парсер руками, если есть десериализатор из коробки.
8 янв 19, 19:46    [21780066]     Ответить | Цитировать Сообщить модератору
 Re: c# верификация типов свойств класса  [new]
Nechto
Member

Откуда:
Сообщений: 798
Shocker.Pro
Nechto
как идентифицировать
понятнее не стало. Неизвестно, что ты вкладываешь в этот термин? Найти свойство по известному типу? Найти свойство по имени? Определить тип по имени? Еще что-то?

В процессе выполнения алгоритма, нужно определить чем является тип свойства:
1. Классом описывающий тег (если так, то я его активирую и вношу все атрибуты)
2. Свойством описывающий атрибут. (просто вношу значения атрибута)


Shocker.Pro
Nechto
как идентифицировать

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


Такое может выгрузить в treeview?
<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> 
8 янв 19, 20:13    [21780073]     Ответить | Цитировать Сообщить модератору
 Re: c# верификация типов свойств класса  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20436
А нельзя выражаться еще яснее?

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

1. тип свойства является классом
2. тип свойства является свойством
расшифруй
8 янв 19, 20:18    [21780074]     Ответить | Цитировать Сообщить модератору
 Re: c# верификация типов свойств класса  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20436
Nechto
Такое может выгрузить в treeview?
  • TreeView отображает иерархический IEnumerable
  • XDocument является иерархическим IEnumerable
    Всё. Этого достаточно, чтобы спроецировать XDocument на TreeView. То есть там даже код почти не нужен, только шаблон для узла
  • 8 янв 19, 20:20    [21780075]     Ответить | Цитировать Сообщить модератору
     Re: c# верификация типов свойств класса  [new]
    Nechto
    Member

    Откуда:
    Сообщений: 798
    Shocker.Pro
    А нельзя выражаться еще яснее?

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

    1. тип свойства является классом
    2. тип свойства является свойством
    расшифруй


    1. public Tzm Tzm { get; set; } //(в xml это тег <Tmz Id="1" Code="Текст" ... >)
    2. public string Code { get; set; } //(в xml это атрибут <X Code="Текст">)
    
    8 янв 19, 20:25    [21780079]     Ответить | Цитировать Сообщить модератору
     Re: c# верификация типов свойств класса  [new]
    Shocker.Pro
    Member

    Откуда: ->|<- :адуктО
    Сообщений: 20436
    Ну то есть у тебя не получается отличить с помощью рефлекшена string от не-string-а? Правильно я расшифровал?
    8 янв 19, 20:39    [21780080]     Ответить | Цитировать Сообщить модератору
     Re: c# верификация типов свойств класса  [new]
    Shocker.Pro
    Member

    Откуда: ->|<- :адуктО
    Сообщений: 20436
    Но опять же, для этой цели (помечать нужные свойства) существуют штатные атрибуты [XmlAttribute] и [XmlElement]. Существует уже готовый встроенный класс для вот этого:
    Nechto
    Написал рекурсивную функцию, которая перебирает классы, свойства и коллекции классов и заносит данные из xml файла.
    Существует куча инструментов, которые создают тебе класс по xsd-схеме, либо по готовому xml (если схемы у тебя нет). Непонятно, зачем писать свои велосипеды (разве что для учебных целей)
    8 янв 19, 21:20    [21780095]     Ответить | Цитировать Сообщить модератору
     Re: c# верификация типов свойств класса  [new]
    Roman Mejtes
    Member

    Откуда: г. Пермь
    Сообщений: 3404
    WPF поддерживает XPath возможность стоит смотреть в этом направлении.
    Типы значений (структуры) наследуют тип ValueType, возможно стоит исходить из этого, если нужно редактировать это значение, то имеет смысл проверять их на IConvertible и преобразовывать их из строки в нужный вам тип.
    8 янв 19, 21:40    [21780103]     Ответить | Цитировать Сообщить модератору
     Re: c# верификация типов свойств класса  [new]
    Petro123
    Member

    Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
    Сообщений: 38643
    Roman Mejtes
    XPath

    +1
    Nechto
    Я всего лишь задал вопрос, а не просил переходить на личности!

    тебя 8 человек просят обрисовать задачу верхнего уровня (по ГУИ)


    Nechto
    Выгружать нужно определённые теги и атрибуты, не все содержимое файла.

    как выбирает юзверь что выгружать и что не выгружать?
    Как учитывается наследование?
    Как учитываются связи? Например в одной ноде справочник, а в другой ноде сбоку данные этого справочника классификатора?
    ЗЫ.
    Получается что тебе надо слово "конвертер" из А в Б.
    8 янв 19, 21:52    [21780108]     Ответить | Цитировать Сообщить модератору
     Re: c# верификация типов свойств класса  [new]
    Petro123
    Member

    Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
    Сообщений: 38643
    Roman Mejtes
    WPF поддерживает XPath возможность стоит смотреть в этом направлении.
    Типы значений (структуры) наследуют тип ValueType, возможно стоит исходить из этого, если нужно редактировать это значение, то имеет смысл проверять их на IConvertible и преобразовывать их из строки в нужный вам тип.

    мне кажется, что XML стоит вообще пока без типов рассматривать.
    автор
    Нужно разработать WPF приложение, которое будет открывать xml файл и выводить его содержимое на экран в виде дерева (таблицы).
    где тут типы?
    8 янв 19, 21:56    [21780110]     Ответить | Цитировать Сообщить модератору
     Re: c# верификация типов свойств класса  [new]
    Petro123
    Member

    Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
    Сообщений: 38643
    Nechto
    Такое может выгрузить в treeview?

    вариант1:
    XDocument doc = XDocument.Parse(str); 
    ...
    foreach(var child in item.ChildNodes)
          tree.Add(.....
        {
    
    8 янв 19, 22:09    [21780117]     Ответить | Цитировать Сообщить модератору
     Re: c# верификация типов свойств класса  [new]
    Petro123
    Member

    Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
    Сообщений: 38643
    Nechto
    Выгружать нужно определённые теги и атрибуты, не все содержимое файла.
    вариант решения №2 - загружаете весь XML (либо циклом либо сериализатором). Потом просто фильтруете (скрываете видимость)
    node.visible=false
    8 янв 19, 22:22    [21780120]     Ответить | Цитировать Сообщить модератору
     Re: c# верификация типов свойств класса  [new]
    hVostt
    Member

    Откуда:
    Сообщений: 15619
    Nechto
    Мой способ решения:
    1.) Описать каждый тег классами.


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

    Если речь идёт о тупой (де)сериализации в XML, читайте соответствующую литературу.
    9 янв 19, 03:16    [21780191]     Ответить | Цитировать Сообщить модератору
     Re: c# верификация типов свойств класса  [new]
    Nechto
    Member

    Откуда:
    Сообщений: 798
    Правильно сказали, велосипед сделал исключительно из интереса.

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

    // 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");
             }
         }
    }
    

    <!--View.Xaml-->
    <TreeView ItemsSource="{Binding Items2}">
        <!-- теперь я так понимаю нужно описать узлы (шаблоны), используя XPath -->
    </TreeView>
    
    9 янв 19, 08:02    [21780228]     Ответить | Цитировать Сообщить модератору
     Re: c# верификация типов свойств класса  [new]
    Petro123
    Member

    Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
    Сообщений: 38643
    Nechto,
    Модель делают на классах, а не на текстовых файлах xml.
    Т.е. одноразовый импорт в классы и потом забыть про xml.
    9 янв 19, 09:39    [21780278]     Ответить | Цитировать Сообщить модератору
    Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
    Все форумы / WinForms, .Net Framework Ответить