Можно ли использовать CondityAlWeakTable с ключом кортежа (или ключом, состоящей из нескольких ссылок)?C#

Место общения программистов C#
Ответить
Anonymous
 Можно ли использовать CondityAlWeakTable с ключом кортежа (или ключом, состоящей из нескольких ссылок)?

Сообщение Anonymous »

Я большой поклонник CondentalWeakTable . Это действительно довольно здорово. По сути, это позволяет вам связывать/прикрепить/соединить одну ссылку на другую ссылку, при этом все, что является безопасным. К сожалению, у меня, кажется, проблема, с которой я продолжаю сталкиваться, и я не смог найти хороший ответ на него. Ниже), где я использую CondentalWeakTable , но вместо использования одной ссылки для ключа мне нужно объединить два элемента и сделать это ключом. Это показано ниже с помощью объекта ключа (который является просто расширенным Tuple для демонстрационных целей и телесности):

Код: Выделить всё

[Fact]
public void TupleKey()
{
var first = new object();
var table = new ConditionalWeakTable();
var context = table.GetValue( new Key( first, new object() ), key => new object() );

// .. table has one entry here.

GC.Collect();
GC.WaitForPendingFinalizers();

Debugger.Break(); // Table is empty here.

}

class Key : Tuple
{
public Key( object item1, object item2 ) : base( item1, item2 ) {}
}
Когда называется Debugger.break , CondityAlWeakTable пуст, даже если существует активная ссылка на одну из частей ключа В методе испытания. Это имеет смысл, поскольку ссылка на ключ нигде не может быть найдена в тесте.
Однако, поскольку есть одна активная ссылка на одну из частей ключа < /code> Object, я бы хотел, чтобы запись в ConditudalWeakTable также оставалась активной и оставалась активной до тех пор, пока все его дети/внутренние ссылки не будут заявлены. об этом и возможных решениях, это было бы Awesome , если бы был слабый образный сет , который каким -то образом можно было бы использовать в качестве ключа к словаря , но из некоторых поисков, это делает Не кажется, что Sleedhashset существует в .net.)
, надеюсь, это описывает мою дилемму. Я в основном хочу использовать CondentalWeakTable (или какой -то эквивалент) для хранения связанного значения (в качестве ввода ключа/значения), но вместо того, чтобы использовать одну (слабую) ссылку в качестве ключа к записи, я хотел бы нравится использовать два (или больше).
- это то, что я ищу, чтобы достичь возможного (без необходимости писать значительный объем пользовательского кода, то есть)?

Подробнее здесь: https://stackoverflow.com/questions/378 ... -comprised
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»