Hashtable "по умолчанию" геттер? - PullRequest
0 голосов
/ 08 июня 2009

У определенного класса есть Hashtable, содержащий элементы 1..N. Мне интересно, есть ли в классе универсальные методы получения / установки для Hashtable. Я хочу, чтобы значения хеш-таблицы вели себя как обычные свойства объекта:

public class foo 
{
  private HashTable _stuff;
  public HashTable stuff { get; set; }
  public foo() {}
}

Мне было интересно, может ли что-то подобное произойти:

foo bar = new foo();
bar.stuff.name; //returns the data in the 'name' index if it exists
bar.stuff.name = "Me"; //sets the stuff[name] value = "me"

Ответы [ 5 ]

1 голос
/ 08 июня 2009

В текущей версии C # ничего подобного нет. Динамические вещи в C # 4.0 облегчат это.

В то же время, почему бы просто не сделать Name (и другие значения) простыми свойствами? Пока вы работаете над этим, вам будет проще работать с общим Dictionary<K,V>, чем с HashTable.

0 голосов
/ 18 апреля 2013

Взгляните на ExpandoObject в c # 4.

0 голосов
/ 08 июня 2009

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

Прежде всего, я предполагаю, что есть причина, по которой вы не используете объекты ADO, которые обычно решают проблемы рендеринга, о которых вы упоминаете (вместе с GridView или аналогичными).

Если вы хотите создать класс с «динамическими» свойствами, вы можете создать propertybag

это не сделает приведенный выше код возможным, но будет работать с механизмом рендеринга, основанным на TypeDescriptor с использованием пользовательских дескрипторов.

0 голосов
/ 08 июня 2009

Очевидно, вы можете сделать это в .NET 4.0, реализовав интерфейс IDynamicMetaObjectProvider ... хотя это не кажется тривиальным!

0 голосов
/ 08 июня 2009

Вы не можете сделать это с C #, по крайней мере, в текущей версии. То, что вам нужно, это эквивалент метода method_missing в ruby.

Если бы это был C # 4.0, вы могли бы сделать что-то похожее с анонимными типами и динамическим ключевым словом, однако вам нужно знать ключи заранее.

...