Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
13 / 15 / 5
Регистрация: 01.05.2013
Сообщений: 357
.NET 5

Как получить в атрибут элемента значение другого элемента

11.03.2021, 12:19. Показов 1742. Ответов 7

Студворк — интернет-сервис помощи студентам
Привет, форум!

Существует атрибут
C#
1
[Compare]
Он сравнивает элемент модели с текущим элементом, на котором указывается атрибут.

Как это реализуется?
С помощью чего можно получить информацию о других элементах класса из атрибута (создаю свой)?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.03.2021, 12:19
Ответы с готовыми решениями:

Как получить доступ к данным элемента формы из другого элемента этой же формы
constructor TItem.Create(Par: TFlowPanel;N:string;NameOfScript:string); begin Parent := Par; MainPanel ...

Как указать атрибут элемента внутри самого элемента?
Как указать атрибут элемента внутри самого элемента? var chechDefault = $("input:radio").prop("checked", true);

Списки. Инициализация, добавление элемента в начало и после другого элемента. Удаление элемента
uses crt; type list= ^item; item=record data: integer; next:list; end; var l:list; procedure print;

7
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18277 / 14200 / 5368
Регистрация: 17.03.2014
Сообщений: 28,881
Записей в блоге: 1
13.03.2021, 11:36
jwplaster, речь я так понимаю о System.ComponentModel.DataAnnotations.CompareAttribute. Примерно так это можно сделать
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
class MyCompareAttribute : Attribute
{
    public string OtherProperty { get; }
    public MyCompareAttribute(string otherProperty)
    {
        OtherProperty = otherProperty;
    }
}
 
bool IsValid<T>(T model)
{
    bool valid = true;
    foreach (var propInfo in typeof(T).GetProperties())
    {
        var compareAttr = propInfo.GetCustomAttribute<MyCompareAttribute>();
        if (compareAttr == null) continue;
        
        var otherPropInfo = typeof(T).GetProperty(compareAttr.OtherProperty);
        
        object propValue = propInfo.GetValue(model);
        object otherPropValue = otherPropInfo.GetValue(model);
        if (!object.Equals(propValue, otherPropValue))
        {
            valid = false;
            break;
        }
    }
    return valid;
}
Пример использования
C#
1
2
3
4
5
6
7
8
9
10
class SomeClass
{
    [MyCompare("N2")]
    public int N1 { get; set; }
    public int N2 { get; set; }
 
    public string S1 { get; set; }
    [MyCompare("S1")]
    public string S2 { get; set; }
}
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
void Main()
{
    SomeClass[] testData = {
        new SomeClass { N1 = 1, N2 = 1, S1 = "aaa", S2 = new string('a', 3) },
        new SomeClass { N1 = 2, N2 = 1, S1 = "aaa", S2 = new string('a', 3) },
        new SomeClass { N1 = 2, N2 = 1, S1 = "aaa", S2 = new string('a', 3) },
        new SomeClass { N1 = 1, N2 = 3, S1 = "bbb", S2 = "ccc" },
    };
    foreach (var model in testData)
    {
        Console.WriteLine(IsValid(model));
    }
}
P.S. Код написан "на коленке" и нуждается в доработке. В частности нужно добавить обработку ошибок.
0
13 / 15 / 5
Регистрация: 01.05.2013
Сообщений: 357
15.03.2021, 12:06  [ТС]
OwenGlendower, да про такой метод я и сам знаю как бэ. Проверять вне все умеют.

Меня больше волнует возможность проверки внутри самого атрибута... т.е. при создании модели чтоб всё проверялось.
Или даже тут проверка происходит где-то вне, просто скрытая, а не при создании модели?

Добавлено через 43 минуты
В общем, я сам нашел решение.
https://referencesource.micros... tribute.cs
Переделал под себя и всё ок
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18277 / 14200 / 5368
Регистрация: 17.03.2014
Сообщений: 28,881
Записей в блоге: 1
15.03.2021, 12:46
Цитата Сообщение от jwplaster Посмотреть сообщение
Или даже тут проверка происходит где-то вне, просто скрытая, а не при создании модели?
Атрибут сам по себе работать не может. Где-то снаружи должен быть код учитывающий его.

Цитата Сообщение от jwplaster Посмотреть сообщение
Переделал под себя и всё ок
0
1152 / 860 / 263
Регистрация: 30.04.2009
Сообщений: 3,603
15.03.2021, 13:10
jwplaster, ну и что же ты переделал чтобы проверка происходила при создании модели?
0
13 / 15 / 5
Регистрация: 01.05.2013
Сообщений: 357
15.03.2021, 14:57  [ТС]
OwenGlendower, ну, видимо, всё же Asp.Net вызывает IsValid при биндинге модели

Добавлено через 25 секунд
nicolas2008, я переделал под себя другие штуки. А так, при биндинге всё ок работает как-то.

Добавлено через 20 секунд
nicolas2008, я переделал под себя другие штуки. А так, при биндинге всё ок работает как-то.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
15.03.2021, 15:56
Цитата Сообщение от jwplaster Посмотреть сообщение
я переделал под себя другие штуки
Так поделитесь с товарищами.
0
13 / 15 / 5
Регистрация: 01.05.2013
Сообщений: 357
15.03.2021, 16:20  [ТС]
kolorotur, да не, то что там по ссылке, это рабочий вариант.
Просто мне требовался атрибут-проверка другого элемента. В стиле:
Если другой элемент существует, то заданный должен быть равен null. И наоборот. В общем-то, просто переделал в исключающее или
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.03.2021, 16:20
Помогаю со студенческими работами здесь

Получить индекс элемента одномерного массива, если известно значение элемента (без цикла)?
Получить индекс элемента одномерного массива, если известно значение элемента (без цикла)? То есть у меня есть заполненый массив. Есть...

Не могу получить атрибут class элемента в WebBrowser
На сайте есть такой код &lt;div class=&quot;product-item inline&quot;&gt;&lt;/div&gt; Пытаюсь получить класс HtmlElementCollection divs =...

Как получить hwnd элемента диалога с другого класса?
Как получить hwnd элемента диалога с другого класса? Допустим, сижу в другом классе диалоге и при одном событии сделать недоступной...

Как изменить текст элемента, который находится внутри другого элемента?
есть элемент span который находиться внутри элемента р, как сделать так чтобы к примеру вместо &lt;p id=&quot;p&quot;&gt;123&lt;span...

Как найти количество элементов в двумерном массиве до элемента и после какого-то другого элемента
Например 23 23 54 65 23 12 59 87 33 76 12 90 33 45 67 84 от 23 до элемента до 59 и в отдельный счетчик от 12 до 84


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru