Как и любой другой метод, изменение параметра не изменяет аргумент вызывающего абонента , если это не параметр ref
(чего не может быть для расширения метод первый параметр). Аргумент передается значением , даже если это значение является ссылкой.
Один из вариантов - вернуть словарь:
public static IDictionary<TKey, TValue> AddIfNullCreate<TKey, TValue>
(this IDictionary<TKey, TValue> dictionary, TKey key, TValue value)
{
if (dictionary == null)
{
dictionary = new Dictionary<TKey, TValue>();
}
dictionary.Add(key, value);
return dictionary;
}
Тогда:
d = d.AddIfNullCreate(1, "ss");
Однако я не уверен, что я действительно сделал бы это. Я думаю, что я просто условно создал бы словарь в самом методе:
public void DictionaryTest()
{
IDictionary<int, string> d = GetD() ?? new Dictionary<int, string>();
d[1] = "ss";
}