powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / c# верификация типов свойств класса
25 сообщений из 55, страница 2 из 3
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
25 сообщений из 55, страница 2 из 3
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / c# верификация типов свойств класса
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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