Hashtable“默认”getter?

时间:2009-06-08 00:54:35

标签: c# .net asp.net-2.0

特定类具有包含1..N元素的Hashtable。我想知道在类中使用的Hashtable是否存在泛型getter / setter方法。我希望使哈希表值更像常规对象属性:

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 个答案:

答案 0 :(得分:1)

在当前版本的C#中没有类似的东西。 C#4.0中的动态内容将使这更容易。

与此同时,为什么不将Name(和其他值)简单化为属性?在您使用它时,您会发现通用Dictionary<K,V>HashTable更容易使用。

答案 1 :(得分:0)

你不能用C#做到这一点,至少在当前版本中不行。你需要的是ruby中的method_missing。

如果这是C#4.0,您可以使用匿名类型和动态关键字执行类似的操作,但是您需要预先知道密钥。

答案 2 :(得分:0)

显然你可以通过实现IDynamicMetaObjectProvider接口在.NET 4.0中做到这一点......虽然看起来并不简单!

答案 3 :(得分:0)

根据您呈现HTML的方式,可能有几种方法可以解决您的问题。 上面的代码如c#中当前不可能的那样。

首先,我假设您没有使用ADO对象的原因,这通常可以解决您提到的渲染问题(与GridView或类似的一起)。

如果要生成具有“动态”属性的类,可以创建propertybag

虽然它不会使上面的代码成为可能,但会使用基于TypeDescriptor的渲染引擎使用自定义描述符。

答案 4 :(得分:0)

在c#4中查看ExpandoObject