特定类具有包含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"
答案 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
。