C# 在构造函数中初始化私有集合,重复还是使用链接?

C# 在构造函数中初始化私有集合,重复还是使用链接?,c#,C#,我有一门课,像: public class Something { private Dictionary<int,int> dic; public Something() { dic = new Dictionary<int,int>(); } public Something(Dictionary<int,int> a) { dic = new Dictionary<int,i

我有一门课,像:

public class Something
{
   private Dictionary<int,int> dic;

   public Something() 
   {
         dic = new Dictionary<int,int>();
   }

   public Something(Dictionary<int,int> a)
  {
         dic = new Dictionary<int,int>();

   }

}
公共类
{
私人词典;
公开某事
{
dic=新字典();
}
公共物品(字典a)
{
dic=新字典();
}
}
如何避免两次初始化集合?

调用
this()

public Something()
{
dic=新字典();
}
公共某物(字典a):这个()
{
//用…做点什么??
}
请注意,默认情况下不会从其他构造函数调用“default”构造函数,因此您实际上不会两次初始化字典。

调用
this()

public Something()
{
dic=新字典();
}
公共某物(字典a):这个()
{
//用…做点什么??
}

请注意,默认情况下不会从其他构造函数调用“default”构造函数,因此您实际上没有两次初始化字典。

我猜您正在寻找:

公共类
{
私人词典;
公开某事
:此(新词典())
{
}
公共物品(字典a)
{
dic=a;
}
}

我想您正在寻找:

公共类
{
私人词典;
公开某事
:此(新词典())
{
}
公共物品(字典a)
{
dic=a;
}
}

还有另一种选择:

public class Something
{
    private Dictionary<int, int> dic;

    private void Initialize()
    {
        dic = new Dictionary<int, int>();
    }

    public Something()
    {
        Initialize();
    }

    public Something(Dictionary<int, int> a)
    {
        Initialize();
        // do something with a??
        // Yes, you are not using the parameter "a".
        // I don't know if this is intentional.
    }
}
公共类
{
私人词典;
私有void初始化()
{
dic=新字典();
}
公开某事
{
初始化();
}
公共物品(字典a)
{
初始化();
//用…做点什么??
//是的,您没有使用参数“a”。
//我不知道这是否是故意的。
}
}
注意:这不适用于
只读
字段



顺便说一句,尽你所能。编译器可以对其进行优化。

还有另一种选择:

public class Something
{
    private Dictionary<int, int> dic;

    private void Initialize()
    {
        dic = new Dictionary<int, int>();
    }

    public Something()
    {
        Initialize();
    }

    public Something(Dictionary<int, int> a)
    {
        Initialize();
        // do something with a??
        // Yes, you are not using the parameter "a".
        // I don't know if this is intentional.
    }
}
公共类
{
私人词典;
私有void初始化()
{
dic=新字典();
}
公开某事
{
初始化();
}
公共物品(字典a)
{
初始化();
//用…做点什么??
//是的,您没有使用参数“a”。
//我不知道这是否是故意的。
}
}
注意:这不适用于
只读
字段



顺便说一句,尽你所能。编译器可以对其进行优化。

如果需要,可以将其链接,编译器可以将其内联。顺便说一句,你对参数“a”做什么?@Theraot参数a只是为了传达我的情况,我在我的真实代码中使用它。如果你愿意,你可以链接它,编译器可以内联它。顺便说一句,你对参数“a”做了什么?@Theraot参数a只是为了传达我的情况,我在我的真实代码中使用它。这和D Stanley的答案都很好。我认为这对于这种情况稍微好一点,因为它使用了良好的默认值,而不是多余的。在我看来,这也更具表现力。这和D斯坦利的回答都很好。我认为这对于这种情况稍微好一点,因为它使用了良好的默认值,而不是多余的。在我看来,它也更有表现力。
public class Something
{
    private Dictionary<int, int> dic;

    private void Initialize()
    {
        dic = new Dictionary<int, int>();
    }

    public Something()
    {
        Initialize();
    }

    public Something(Dictionary<int, int> a)
    {
        Initialize();
        // do something with a??
        // Yes, you are not using the parameter "a".
        // I don't know if this is intentional.
    }
}