2015-11-05 1 views
0

Я хочу личное, постоянный членКак инициализировать приватную статическую только для чтения HashSet <char>?

private static readonly HashSet<char> _nameChars 

в мой контроллер, содержащий символы ' ', 'a', 'A', ..., 'z', 'Z'. Целью является проверка формы на стороне сервера. Но как мне инициализировать это HashSet?

private static readonly HashSet<char> _nameChars = ????? 

Есть ли хороший способ сделать это? Я знаю, что C++ имеет инициализацию скобок для std::set.

+0

Если инициализация является более сложной, вы можете использовать статический конструктор: https://msdn.microsoft.com/en-us/library/k9x6w0hc.aspx –

ответ

5

C# также имеет коллекцию инициализаторами:

private static readonly HashSet<char> _nameChars = new HashSet<char> { 'a', 'b', ...}; 

Вы также можете использовать конструктор, который принимает IEnumerable<T> аргумент:

private static readonly HashSet<char> _nameChars = new HashSet<char>("abcde..."); 

Я нахожу второй подход более удобным для чтения.

+0

Коллекции инициализатор использует цикл для инициализации '' HashSet , конструктор делает то же самое. Но я бы предпочел второй, потому что его легче поддерживать. –

+0

Полезно знать, спасибо! –

+0

@TimSchmelter Правильно, ничего не нужно оптимизировать для параметра 'string'. Это быстрее для параметра 'ICollection ', так как емкость HashSet может быть инициализирована ICollection .Count. –

Смежные вопросы