C# “哈希表”;“违约”;盖特?

C# “哈希表”;“违约”;盖特?,c#,.net,asp.net-2.0,C#,.net,Asp.net 2.0,特定类有一个包含1..N个元素的哈希表。我想知道类中使用的哈希表是否有通用的getter/setter方法。我希望使哈希表值的行为更像常规对象属性: public class foo { private HashTable _stuff; public HashTable stuff { get; set; } public foo() {} } 我想知道这样的事情是否会发生: foo bar = new foo(); bar.stuff.name; //returns the

特定类有一个包含1..N个元素的哈希表。我想知道类中使用的哈希表是否有通用的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"
你不能用C#来做这件事,至少在当前版本中不能。您需要的是ruby中缺少的方法_的等价物


如果这是C#4.0,您可以使用匿名类型和dynamic关键字执行类似的操作,但是您需要事先了解密钥。

当前版本的C#中没有类似的操作。C#4.0中的动态特性将使这变得更容易


同时,为什么不让名称(和其他值)成为简单的属性呢?当您使用它时,您会发现通用
字典
哈希表
更容易使用,显然您可以在.NET4.0中通过实现接口来实现这一点。。。但这似乎并不琐碎

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

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

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


不过,它不会使上述代码成为可能,但将使用自定义描述符与基于
类型描述符的呈现引擎一起工作。

看看c#4。

散列中的元素来自数据库查询。查询中hash==db列中的键。我们希望对存储过程的更改能够在前端更改动态生成的HTML表/列表,而无需对添加的字段进行大量额外编码。因此,标准表/字典似乎是最简单的方法。对于表中的每个键,向生成的HTML表中添加一列。