C# “哈希表”;“违约”;盖特?
特定类有一个包含1..N个元素的哈希表。我想知道类中使用的哈希表是否有通用的getter/setter方法。我希望使哈希表值的行为更像常规对象属性: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
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表中添加一列。