Хочу добавить в HashSet<int> переменную, которая будет выполнять роль fill pointer'а.
Т.е. я хочу получить что-то наподобие этого:
public static class HashSetExtensions
{
private int capacity;
public static void capacity(this HashSet<int> hs, int capacity)
{
this.capacity = capacity;
}
public static int capacity(this HashSet<int> hs)
{
return this.capacity;
}
}
Здравствуйте, this, Вы писали:
T>Вопрос: какими путями я могу получить это в C#?
1. Создать свой HashSet<>
2. Залезть через рефлексию в внутренности HashSet и посмотреть размер m_buckets.
Ну, или (гулять так гулять) подсунуть свой сериализатор и посмотреть, что кладётся в слот "Capacity".
Здравствуйте, Sinix, Вы писали:
S>А какая задача? В смысле, чего хочется при помощи capacity добиться?
Задача следующая: контейнеры с HashSet<int> часто передаются в разные функции и заполняются новыми значениями. Постоянно приходится таскать sizeSetA, sizeSetB, как параметры функций.
Например,
while (setA.Count < sizeSetA)
{
int randNumber = rng.Next(-2 * sizeSetA, (2 * sizeSetB) + 2);
setA.Add(randNumber);
}
Поэтому я решил, что лучше инкапсулировать одну переменную внутрь HashSet<int>, чтобы хранить в ней fill pointer. Так что через рефлексию смотреть размер m_buckets не вариант.
Здравствуйте, this, Вы писали:
T>Задача следующая: контейнеры с HashSet<int> часто передаются в разные функции и заполняются новыми значениями. Постоянно приходится таскать sizeSetA, sizeSetB, как параметры функций.
Здравствуйте, this, Вы писали:
T>Т.е. я хочу получить что-то наподобие этого: T>
T>public static class HashSetExtensions
T>{
T> private int capacity;
T> public static void capacity(this HashSet<int> hs, int capacity)
T> {
T> this.capacity = capacity;
T> }
T> public static int capacity(this HashSet<int> hs)
T> {
T> return this.capacity;
T> }
T>}
T>
T>Вопрос: какими путями я могу получить это в C#?
Для такого расширения функциональности классов стандартный путь — это наследование.
Создайте свой потомок HashSet<>
Здравствуйте, Sinix, Вы писали:
S>2. Залезть через рефлексию в внутренности HashSet и посмотреть размер m_buckets.
Вредный совет. Лучше уши себе отморозьте.
Здравствуйте, Spinifex, Вы писали:
S>Посмотрите в сторону C5. Может там уже сделано то что вам нужно: C5.HashSet< T > S>Там много всякого и разного.
Пока что я реализовал наследование в стиле PrefilledHashSet
Как подключить C5 к проекту? Там реально сделано много из того, что мне нужно.
Здравствуйте, Gattaka, Вы писали:
S>>2. Залезть через рефлексию в внутренности HashSet и посмотреть размер m_buckets. G>Вредный совет. Лучше уши себе отморозьте.
Кэп
Здравствуйте, Sinix, Вы писали:
S>Здравствуйте, Gattaka, Вы писали:
S>>>2. Залезть через рефлексию в внутренности HashSet и посмотреть размер m_buckets. G>>Вредный совет. Лучше уши себе отморозьте. S>Кэп
Ну для тебя может и кэп. Но на форуме тусуют люди — не могут nuget подключить.