powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / c# верификация типов свойств класса
55 сообщений из 55, показаны все 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
c# верификация типов свойств класса
    #39756987
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nechtoисключительно из интереса.увы. Такой ваш интерес неинтересен никому.
...
Рейтинг: 0 / 0
c# верификация типов свойств класса
    #39757013
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NechtoТакое может выгрузить в 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> 


Да легко:
Код: xml
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.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
<Window
  x:Class="wpftest.MainWindow"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:wpftest="clr-namespace:wpftest"
  Height="700"
  Width="700">


  <Window.Resources>
    <XmlDataProvider x:Key="XmlData" XPath="/root">
      <x:XData>
        <root xmlns="">
          <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>
        </root>
      </x:XData>
    </XmlDataProvider>
    <HierarchicalDataTemplate x:Key="XmlTemplate">
      <HierarchicalDataTemplate.Resources>
        <wpftest:XmlElementConverter x:Key="XmlElementConverter" />
      </HierarchicalDataTemplate.Resources>
      <TextBlock Text="{Binding Converter={StaticResource XmlElementConverter}}" />
      <HierarchicalDataTemplate.ItemsSource>
        <Binding XPath="child::node()" />
      </HierarchicalDataTemplate.ItemsSource>
    </HierarchicalDataTemplate>
  </Window.Resources>

  <TreeView
    Margin="10"
    ItemsSource="{Binding Source={StaticResource XmlData}, XPath=Post}"
    ItemTemplate="{StaticResource XmlTemplate}" />
</Window>


Код: 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.
namespace wpftest
{
  public partial class MainWindow
  {
    public MainWindow()
    {
      InitializeComponent();
    }
  }

  public class XmlElementConverter: IValueConverter
  {
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
      if (!(value is XmlElement xe)) return DependencyProperty.UnsetValue;
      var sb = new StringBuilder();
      sb.Append(xe.Name);
      foreach (XmlAttribute xa in xe.Attributes)
        sb.Append(" ").Append(xa.Name).Append("=\"").Append(xa.Value).Append("\"");
      return sb.ToString();
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
      throw new NotImplementedException();
    }
  }
}


Собственно, в xaml-разметке большая часть строк кода - от заинлайненного xml, который является источником данных.
...
Рейтинг: 0 / 0
c# верификация типов свойств класса
    #39757021
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Nechto,
Модель делают на классах, а не на текстовых файлах xml.
Т.е. одноразовый импорт в классы и потом забыть про xml.
в классах делают кодеры
...
Рейтинг: 0 / 0
c# верификация типов свойств класса
    #39757023
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны,

+1
а то все блабла
...
Рейтинг: 0 / 0
c# верификация типов свойств класса
    #39757030
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosв классах делают кодерыугу. И фаулер это пустозвон.
...
Рейтинг: 0 / 0
c# верификация типов свойств класса
    #39757122
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

фаулер зарабатывает свое бабло, как и голдрат, деминг, и т.д. японцы
...
Рейтинг: 0 / 0
c# верификация типов свойств класса
    #39757138
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosPetro123,
фаулер зарабатывает свое бабло, как и голдрат, деминг, и т.д. японцы
В форуме собрались те, кто так не считает.
...
Рейтинг: 0 / 0
c# верификация типов свойств класса
    #39757152
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

гнать надо :)
...
Рейтинг: 0 / 0
c# верификация типов свойств класса
    #39757154
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosPetro123,

фаулер зарабатывает свое бабло, как и голдрат, деминг, и т.д. японцы
Ты бы тоже делом занялся :)
...
Рейтинг: 0 / 0
c# верификация типов свойств класса
    #39757410
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

да уж, надо было пойти на системщика в свое время
...
Рейтинг: 0 / 0
c# верификация типов свойств класса
    #39757412
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

да уж, надо было пойти на системщика в свое время
...
Рейтинг: 0 / 0
c# верификация типов свойств класса
    #39757417
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а я всякую фигню пытаюсь продать
...
Рейтинг: 0 / 0
c# верификация типов свойств класса
    #39757505
Nechto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ко всем прислушался и вот что в итоге получил:
1. Модель данных есть
2. Выгрузка происходит один раз, и после про xml файл забываем
3. Наполнение Items без велосипеда, стандартными методами linq (XDocument, XmlSerializer)
4. Результат IEnumerable

Остался TreeView, но с ним у меня туго. Сон Веры Павловны помогите пожалуйста, а то я не пойму как XPath использовать без XmlDataProvider.

Код: 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.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
// XML
<root>
<Chapter Caption="chap1" SysID="1">
    <Position Caption="A" SysID="1">
        <Quantity Result="ignore element"/>   
        <Resources>
            <Tzm Caption="a" Code="1"/>
            <Mch Caption="rrr11" Code="0011"/>
            <Mch Caption="rrr12" Code="0012"/>
        </Resources>
    </Position>
	<Position Caption="B" SysID="2">
        <Quantity Result="ignore element"/>   
        <Resources>
            <Tzm Caption="b" Code="2"/>
            <Mch Caption="rrr21" Code="0021"/>
            <Mch Caption="rrr22" Code="0022"/>
			<Mch Caption="rrr23" Code="0023"/>
        </Resources>
    </Position>
</Chapter>
<Chapter Caption="chap2" SysID="2">
    <Position Caption="A" SysID="1">
        <Quantity Result="ignore element"/>   
        <Resources>
            <Tzm Caption="a" Code="1"/>
            <Mch Caption="rrr11" Code="0011"/>
            <Mch Caption="rrr12" Code="0012"/>
        </Resources>
    </Position>
	<Position Caption="B" SysID="2">
        <Quantity Result="ignore element"/>   
        <Resources>
            <Tzm Caption="b" Code="2"/>
        </Resources>
    </Position>
</Chapter>
</root>

// MODEL
public class Chapter
{
    public int SysId { get; set; }
    public string Caption { get; set; }
    public IEnumerable<Position> Position { get; set; } 
}
public class Position
{
    public int SysId { get; set; }
    public string Caption { get; set; }
    public Tzm Tzm { get; set; }
    public IEnumerable<Mch> Mch { get; set; }  
}
[XmlRoot("Tzm")]
public class Tzm
{
    [XmlAttribute("Code")]
    public int Code { get; set; }
    [XmlAttribute("Caption")]
    public string Caption { get; set; }
}
public class Mch
{
    public string Code { get; set; }
    public string Caption { get; set; }
}

// VIEW_MODEL
var xdoc = XDocument.Load(@"myXml.xml");
IEnumerable<Chapter> Items = xdoc.Descendants("Chapter").Select(chapter => new Chapter
{
    SysId = (int)chapter.Attribute("SysID"),
    Caption = (string)chapter.Attribute("Caption"),
    Position = chapter.Descendants("Position").Select(position =>
    {
        var tzm = position.Descendants("Tzm").FirstOrDefault();
        return new Position
        {
            SysId = (int)position.Attribute("SysID"),
            Caption = (string)position.Attribute("Caption"),
            Tzm = tzm != null ? (Tzm)(new XmlSerializer(typeof(Tzm))).Deserialize(tzm.CreateReader()) : null,
			Mch = position.Descendants("Mch").Select(mch => new Mch
            {
                Code = (string)mch.Attribute("Code"),
                Caption = (string)mch.Attribute("Caption")
            })
        };
    })
});

// VIEW
<TreeView Margin="10" ItemsSource="{Binding Items2}"/>
...
Рейтинг: 0 / 0
c# верификация типов свойств класса
    #39757514
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NechtoДобрый день! Всех с рождеством!

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

Код: c#
1.
2.
3.
            var property = typeof(Position)
                .GetProperties(BindingFlags.Instance | BindingFlags.Public)
                .FirstOrDefault(w => w.CanWrite && w.PropertyType.Equals(typeof(Tzm)));
...
Рейтинг: 0 / 0
c# верификация типов свойств класса
    #39757516
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NechtoТакой способ решения очевиден. Я так понимаю решения по сути нетповелитель взаимоисключающих параграфов детектед.
...
Рейтинг: 0 / 0
c# верификация типов свойств класса
    #39757519
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy, а ты не пробовал сначала прочесть весь топик, а потом отвечать?

Или сейчас получим ответ на каждый вопрос, который уже проехали?
...
Рейтинг: 0 / 0
c# верификация типов свойств класса
    #39757522
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProAntonariy, а ты не пробовал сначала прочесть весь топик, а потом отвечать?

Или сейчас получим ответ на каждый вопрос, который уже проехали?
а что, так можно? o_O
...
Рейтинг: 0 / 0
c# верификация типов свойств класса
    #39757527
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такой способ не даст повода твоим врагам упрекнуть тебя в слоупочестве.
...
Рейтинг: 0 / 0
c# верификация типов свойств класса
    #39757538
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тему перенесите, вопросы по WPF, а не по WF
Использовать обычный Path в binding
<Binding Path=""/> или {Binding PropertyName}
И нужно нормальное наследование сделать в модели представления для Mch и Tmz или не использовать Generic'и, лучше 1ое
...
Рейтинг: 0 / 0
c# верификация типов свойств класса
    #39757551
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аффтар, у вас препод задал дерево отобразить?
Тогда Модель это один класс tree.
Вы бизнес логику проехали при моделировании.
...
Рейтинг: 0 / 0
c# верификация типов свойств класса
    #39757560
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
      if (!(value is XmlElement xe)) return DependencyProperty.UnsetValue;
      var sb = new StringBuilder();
      sb.Append(xe.Name);
      foreach (XmlAttribute xa in xe.Attributes)
        sb.Append(" ").Append(xa.Name).Append("=\"").Append(xa.Value).Append("\"");
      return sb.ToString();
    }


Код: 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.
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (!(value is XmlElement xe)) return DependencyProperty.UnsetValue;
            return $"{xe.Name}{string.Join("", xe.Attributes.ToIEnumerable<XmlAttribute>().Select(xa => $" {xa.Name}=\"{xa.Value}\""))}";
        }

public static class ICollectionExt
    {
        public static IEnumerable<T> ToIEnumerable<T>(this ICollection col) where T : class
        {
            if (col == null) return null;
            var ret = new List<T>();
            if (col.Count > 0)
            {
                var enu = col.GetEnumerator();
                enu.MoveNext();
                for (var i = 0; i < col.Count; i++)
                {
                    ret.Add(enu.Current as T);
                    enu.MoveNext();
                }
            }
            return ret;
        }
    }
...
Рейтинг: 0 / 0
c# верификация типов свойств класса
    #39757613
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
public static class ICollectionExt
    {
        public static IEnumerable<T> ToIEnumerable<T>(this ICollection col) where T : class
        {
            if (col == null) return null;
            var ret = new List<T>();
            if (col.Count > 0)
            {
                var enu = col.GetEnumerator();
                enu.MoveNext();
                for (var i = 0; i < col.Count; i++)
                {
                    ret.Add(enu.Current as T);
                    enu.MoveNext();
                }
            }
            return ret;
        }
    }


Enumerable.Cast(IEnumerable) Method (System.Linq) | Microsoft Docs
Только реализовано несколько более изящно - хотя бы потому, что поддерживает ленивую обработку.
А еще там есть Enumerable.OfType , тоже хорошая штука. Ну и еще много чего хорошего.
Antonariy
Код: c#
1.
return $"{xe.Name}{string.Join("", xe.Attributes.ToIEnumerable<XmlAttribute>().Select(xa => $" {xa.Name}=\"{xa.Value}\""))}";


И смысл в этом плохо читаемом хвосте? С т.з. оптимизации - никакого, т.к. компилятор всю эту интерполяцию развернет в string.Concat+string.Join, а внутри последнего используется всё тот же StringBuilder. Вызов вышеприведенного extension-метода будет менее оптимальным, чем foreach (из-за аллокаций List<T>), а если использовать родной Cast<T>, то будет ровно то же самое, что и с foreach. Просто чтобы использовать новую фичу? А в коде с явным foreach сразу навскидку видно, что происходит.
Nechto Сон Веры Павловны помогите пожалуйста, а то я не пойму как XPath использовать без XmlDataProvider.
Какой тут нафиг XPath, если используется биндинг TreeView к обычной коллекции, и если используется xml-маппинг. Десериализуйте xml в коллекцию с помощью XmlSerializer, и всё.
...
Рейтинг: 0 / 0
c# верификация типов свойств класса
    #39757622
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныНу и еще много чего хорошего.Так и знал, что велосипед изобретаю )
Сон Веры Павловны И смысл в этом плохо читаемом хвосте?В студии в боевой раскраске он читается аки Пушкин.
Меньше кода - больше смысла на экранную площадь.
...
Рейтинг: 0 / 0
c# верификация типов свойств класса
    #39757624
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyВ студии в боевой раскраске он читается аки Пушкин.
Меньше кода - больше смысла на экранную площадь.
Ну, кому как - по мне, так интерполяция строк - самая сомнительная фича новых версий языка. Когда в строке много интерполируемых выражений, и сами по себе эти выражения достаточно длинные, то общее выражение интерполяции выглядит крайне вырвиглазно. Обычный string.Format смотрится куда аккуратнее. Я даже в решарпере предложение заменить формат на интерполяцию отключил, и саму интерполяцию использую только когда интерполиируемых кусков 2-3, и все они - обычные переменные.
...
Рейтинг: 0 / 0
c# верификация типов свойств класса
    #39757692
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныКогда в строке много интерполируемых выражений, и сами по себе эти выражения достаточно длинные, то общее выражение интерполяции выглядит крайне вырвиглазно.с этим согласен, из пары подобных выражений я бы уже не стал интерполяцию делать.
...
Рейтинг: 0 / 0
c# верификация типов свойств класса
    #39757716
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныКакой тут нафиг XPath, если используется биндинг TreeView к обычной коллекции, и если используется xml-маппинг. Десериализуйте xml в коллекцию с помощью XmlSerializer, и всё.

Слишком просто. Не наш путь
...
Рейтинг: 0 / 0
c# верификация типов свойств класса
    #39757723
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,
))


Nechto
Код: 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.
// MODEL
public class Chapter
{
    public int SysId { get; set; }
    public string Caption { get; set; }
    public IEnumerable<Position> Position { get; set; } 
}
public class Position
{
    public int SysId { get; set; }
    public string Caption { get; set; }
    public Tzm Tzm { get; set; }
    public IEnumerable<Mch> Mch { get; set; }  
}
[XmlRoot("Tzm")]
public class Tzm
{
    [XmlAttribute("Code")]
    public int Code { get; set; }
    [XmlAttribute("Caption")]
    public string Caption { get; set; }
}
public class Mch
{
    public string Code { get; set; }
    public string Caption { get; set; }
}


Вместо этого один класс:
class Tree<string>
...
Рейтинг: 0 / 0
c# верификация типов свойств класса
    #39758328
Nechto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123Вместо этого один класс:
class Tree<string>

Окончательно запутался. Это за гранью моего воображения, как мою модель можно уместить в class Tree<string>? И после этого её ещё заполнить.
Вроде следовал вашим советам, и по итогу опять все неправильно :(
...
Рейтинг: 0 / 0
c# верификация типов свойств класса
    #39758342
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NechtoЭто за гранью моего воображениякто вам мешает разговаривать, уточнять, взвешивать?
Вы конечную цель не озвучили. Значит по ТЗ я догадался что вам просто нужно показать xml в виде дерева.
Смотрите выше пост про бизнес логику.
Так?
Тогда обоснуйте, чем модель дерева не подходит для визуализации xml?
Ждем.
...
Рейтинг: 0 / 0
c# верификация типов свойств класса
    #39758343
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NechtoИ после этого её ещё заполнить.выше мой псевдо код видели?
Да. Одна нода это строка с перечислением атрибутов.
...
Рейтинг: 0 / 0
55 сообщений из 55, показаны все 3 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / c# верификация типов свойств класса
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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