使用HashTable映射对象引用

时间:2008-10-02 23:39:28

标签: vb.net hashtable

我想用HashTable

映射对象的引用而不是对象值
configMapping.Add("HEADERS_PATH", Me.headers_path)

当我要检索“HEADERS_PATH”的值时,我将能够为Me.headers_path指定一个值

类似C中的“&”运算符

4 个答案:

答案 0 :(得分:3)

我假设 Me.headers_path 是一个System.String。因为 System.String 是不可变的,你想要的是无法实现的。但是,您可以添加额外的间接级别来实现类似的行为。

  

计算机科学的所有问题都可以   另一个层次的解决方案   间接。    Butler Lampson

C#中的示例(请善意编辑VB并稍后删除此评论):

public class Holder<T> {
    public T Value { get; set; }
}

...

Holder<String> headerPath = new Holder<String>() { Value = "this is a test" };
configMapping.Add("HEADERS_PATH", headerPath);

...

((Holder<String>)configMapping["HEADERS_PATH"]).Value = "this is a new test";

// headerPath.Value == "this is a new test"

答案 1 :(得分:1)

使标题路径成为属性(带有设置)

答案 2 :(得分:1)

这似乎是一个字典,在.Net 2.0中,如果要更新的引用总是字符串,则可以定义为Dictionary;如果要获取任意引用,则可以定义为Dictionary(不推荐)。

如果你需要替换字典中的值,你可以定义自己的类,并提供一些辅助方法来使这更容易。

答案 3 :(得分:1)

我不完全确定你想做什么。假设smink是正确的,那么这里是他的代码的VB转换。抱歉,我无法编辑它,我认为我还没有足够的代表。

public class Holder(Of T)
    public Value as T 
end class
...
Dim headerPath as new Holder(Of String)
headerPath.Value = "this is a test"
configMapping.Add("HEADERS_PATH", headerPath)
...
Directcast(configMapping["HEADERS_PATH"]),Holder(Of String)).Value = "this is a new test"

'headerPath.Value now equals "this is a new test"

@marcj - 您需要在答案中转义有角度的括号,因此请使用&amp; lt;对于&lt;和&amp; gt;对于&gt;。再说抱歉,我不能为你编辑你的帖子。