Сопоставить ссылку на объект с помощью HashTable

StackOverflow https://stackoverflow.com/questions/165075

  •  03-07-2019
  •  | 
  •  

Вопрос

Я хотел бы отобразить ссылку на объект вместо значения объекта с помощью HashTable

configMapping.Add("HEADERS_PATH", Me.headers_path)

таким образом, когда я собираюсь получить значение " HEADERS_PATH " Я смогу присвоить значение Me.headers_path

что-то вроде & & Усилитель; & Quot; оператор в C

Это было полезно?

Решение

Я предполагаю, что Me.headers_path является System.String. Поскольку System.String являются неизменяемыми, то, чего вы хотите, достичь невозможно. Но вы можете добавить дополнительный уровень косвенности для достижения аналогичного поведения.

  

Все проблемы в информатике могут   быть решен другим уровнем   Косвенная.    Батлер Лэмпсон

Пример на 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"

Другие советы

сделать путь заголовков свойством (с установленным)

Может показаться, что это словарь, который в .Net 2.0 можно определить как словарь, если ссылки, которые вы хотите обновить, всегда являются строками, или словарь (не рекомендуется), если вы хотите получить произвольную ссылку.

Если вам нужно заменить значения в словаре, вы можете определить свой собственный класс и предоставить несколько вспомогательных методов, чтобы сделать это проще.

Я не совсем уверен, что ты хочешь делать. Если предположить, что 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; за < и & amp; gt; для > ;. Снова извините, я не могу просто отредактировать ваше сообщение для вас.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top