Словарь константы в c#

Конечно - используйте split, reduce и filter с % (по модулю) для делимости:

const str = "The best 6 of 8 will get 9 points";

const strArr = str.split("");
const threesArr = strArr.filter(e => parseInt(e) % 3 == 0);
const sumOfThrees = threesArr.reduce((acc, curr) => acc + parseInt(curr), 0);

const allNumbers = strArr.filter(e => parseInt(e));
const lastNumber = allNumbers[allNumbers.length - 1];

console.log("Sum: " + sumOfThrees);
console.log("Last: " + lastNumber);
[118 ]
8
задан Samuel Carrijo 12 May 2009 в 17:07
поделиться

7 ответов

В .NET Framework нет ничего для поможет вам здесь, но этот пост дает довольно хорошую реализацию универсального ReadOnlyDictionary на C #. Он реализует все интерфейсы, которые вы могли бы ожидать от него ( IDictionary , ICollection , IEnumerable и т. Д.), И в качестве бонуса весь класс и его члены являются полностью прокомментирован с помощью XML.

(Я воздержался от размещения кода здесь, потому что он действительно довольно длинный со всеми комментариями XML.)

12
ответ дан 5 December 2019 в 07:13
поделиться

Полностью скрыть словарь. Просто предоставьте метод get для класса DictContainer, который извлекает элементы из словаря.

public class DictContainer
{
    private readonly Dictionary<int, int> myDictionary;

    public DictContainer()
    {
        myDictionary = GetDictionary();
    }

    private Dictionary<int, int> GetDictionary()
    {
        Dictionary<int, int> myDictionary = new Dictionary<int, int>();

        myDictionary.Add(1, 2);
        myDictionary.Add(2, 4);
        myDictionary.Add(3, 6);

        return myDictionary;
    }

    public this[int key]
    {
        return myDictionary[key];
    }
}
7
ответ дан 5 December 2019 в 07:13
поделиться

и это другой способ

class ReadOnlyDic<Key, Value> : Dictionary<Key, Value>
{
    private bool _locked = false;

    public new void Add(Key key, Value value)
    {
        if (!_locked)
        {
            base.Add(key, value);
        }
        else
        {
            throw new ReadOnlyException();
        }
    }
    public void Lock()
    {
        _locked = true;
    }
}
0
ответ дан 5 December 2019 в 07:13
поделиться

Э ... тогда не определяйте метод добавления ...

Сохраните переменную myDictionary закрытой и предоставьте средство получения / индексирования, чтобы он мог только читать извне этого класса ..

задается вопросом, не упустил ли он смысл полностью

3
ответ дан 5 December 2019 в 07:13
поделиться

Для этого нет встроенного способа, рассмотрите возможность использования класса-оболочки.

1
ответ дан 5 December 2019 в 07:13
поделиться
interface IReadOnlyDic<Key, Value>
{
    void Add(Key key, Value value);
}
class ReadOnlyDic<Key, Value> : Dictionary<Key, Value>, IReadOnlyDic<Key, Value>
{
    public new void Add(Key key, Value value)
    {
        //throw an exception or do nothing
    }
    #region IReadOnlyDic<Key,Value> Members

    void IReadOnlyDic<Key, Value>.Add(Key key, Value value)
    {
        base.Add(key, value);
    }

    #endregion
}

для добавления настраиваемых элементов;

    IReadOnlyDic<int, int> dict = myDictInstance as IReadOnlyDic<int, int>;
    if (dict != null)
        dict.Add(1, 155);
0
ответ дан 5 December 2019 в 07:13
поделиться

I liked the link from bruno-conde, which was a simpler one, but once I can't mark his comment as the answer, I'll mark Noldorin answer as the official, for it is a similar and satisfying answer.

Too bad there's not a way to prevent the code from compiling :(. Thanks, guys

0
ответ дан 5 December 2019 в 07:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: