Nano Hash - криптовалюты, майнинг, программирование

Динамический класс, в котором свойства берутся из списка / словаря

Я хотел бы создать динамический класс, выполняющий следующие действия:

  1. У меня есть словарь, где ключи - целые числа, а значения - строки.

    Dictionary<int, string> PropertyNames =  new Dictionary<int, string>();
    PropertyNames.Add(2, "PropertyName1");
    PropertyNames.Add(3, "PropertyName2");
    PropertyNames.Add(5, "PropertyName3");
    PropertyNames.Add(7, "PropertyName4");
    PropertyNames.Add(11,"PropertyName5");
    
  2. Я хотел бы передать этот словарь в конструктор класса, который встраивает свойства в экземпляр класса. И предположим, что я хотел бы иметь функции получения и установки для каждого из этих свойств. например.:

    MyDynamicClass Props = new MyDynamicClass( PropertyNames );
    Console.WriteLine(Props.PropertyName1);
    Console.WriteLine(Props.PropertyName2);
    Console.WriteLine(Props.PropertyName3);
    Props.PropertyName4 = 13;
    Props.PropertyName5 = new byte[17];
    

Мне не удается понять DLR.

12.03.2013

  • См. Эту статью, я думаю, это поможет: stackoverflow.com/questions/2974008/ 12.03.2013
  • Вы в основном описываете ExpandoObject. Проверьте это: msdn.microsoft.com/en-us/ библиотека / 12.03.2013
  • Ладно, я думаю, это достаточно просто. Я никогда не знал о ExpandoObject. 12.03.2013
  • Просто из любопытства, может ли кто-нибудь знать, почему MSFT решила назвать класс ExpandoObject вместо ExpandObject? Похоже на опечатку. 12.03.2013
  • К вашему сведению, вы отбрасываете почти все проверки во время компиляции и жертвуете производительностью, когда используете такие типы, как ExpandoObject или DynamicObject. 12.03.2013
  • @AntonTykhyy Спасибо, что сообщили мне о потере производительности. Для меня это может стать преградой, поскольку у меня есть временные ограничения. 14.03.2013

Ответы:


1

Кажется, вам нужен класс DynamicObject. Фактически, документация показывает, как сделать именно то, что вы просили. Воспроизведено здесь в урезанной версии для краткости:

public class DynamicDictionary : DynamicObject
{
    Dictionary<string, object> dictionary = new Dictionary<string, object>();

    public int Count
    {
        get { return dictionary.Count; }
    }

    public override bool TryGetMember(GetMemberBinder binder, out object result)
    {
        string name = binder.Name.ToLower();
        return dictionary.TryGetValue(name, out result);
    }

    public override bool TrySetMember(SetMemberBinder binder, object value)
    {
        dictionary[binder.Name.ToLower()] = value;
        return true;
    }
}
12.03.2013
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..