C# 扩展方法中创建的实例为null
我已经创建了这个扩展方法C# 扩展方法中创建的实例为null,c#,extension-methods,C#,Extension Methods,我已经创建了这个扩展方法 public static void AddIfNullCreate<TKey, TValue>(this IDictionary<TKey, TValue> dictionary, TKey key, TValue value) { if (dictionary == null) { dictionary = new Dictionary<TKey, TValue>(); }
public static void AddIfNullCreate<TKey, TValue>(this IDictionary<TKey, TValue> dictionary, TKey key, TValue value)
{
if (dictionary == null)
{
dictionary = new Dictionary<TKey, TValue>();
}
dictionary.Add(key, value);
}
public static void AddIfNullCreate(此IDictionary dictionary、TKey、TValue)
{
if(dictionary==null)
{
字典=新字典();
}
添加(键、值);
}
但是当我使用它的时候
public void DictionaryTest()
{
IDictionary<int, string> d = GetD();
d.AddIfNullCreate(1,"ss");
}
private IDictionary<int, string> GetD()
{
return null;
}
public void DictionaryTest()
{
IDictionary d=GetD();
d、 补充(1,“ss”);
}
私有IDictionary GetD()
{
返回null;
}
调用addifynullcreate后,该值为空。为什么会这样?就像任何其他方法一样,对参数的更改不会更改调用方的参数,除非它是
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;
}
然而,我不确定我真的会那样做。我想我应该在方法本身中有条件地创建字典:
public void DictionaryTest()
{
IDictionary<int, string> d = GetD() ?? new Dictionary<int, string>();
d[1] = "ss";
}
public void DictionaryTest()
{
IDictionary d=GetD()??新字典();
d[1]=“ss”;
}
如果这是一种普通方法,则需要将字典作为ref参数传递,以便正确设置指向新创建对象的内存指针。不过,我认为不允许您将扩展方法的第一个参数指定为ref参数。Jon在这里,没有什么要添加的,一如既往:)+1
public void DictionaryTest()
{
IDictionary<int, string> d = GetD() ?? new Dictionary<int, string>();
d[1] = "ss";
}